This application (further - The Program) is a method to execute analysis of clinic and alaboratory features in multiple injured children while treatment in ICU by prednisolone and dexamethazone. This software is an example of realisation of analytic methods by which we conducted our survey, created patient samples and making comparison analysis between them.
Copyright (C) 2020, by Konstantin Pshenisnov, Yurii Aleksandrovich and Andrei Lipin
This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/
The Program is presented in several files; one of them is a python-notebook with the Python3-based code and is an unseparated part of The Program with the same legal base, namely GNU General Public License. All other files distributed as unseparated parts of this Program are available on the link: https://github.com/docinit/hormone_therapy_in_children_with_multiple_injuries
Данное приложение является методом анализа клинико-лабораторных данных у пациентов с тяжелой сочетанной травмой, которые получали или не получали кортикостероидную терапию преднизолоном и/или дексаметазоном. В данном приложении описаны ход работы, методы формирования выборок и подходы к проведению аналитической работы с этими выборками. Также представлен метод реализации проведения данного анализа с помощью python v.3 и дополнительных библиотек.
Эта программа - свободное программное обеспечение; вы можете распространять и/или модифицировать ее на условиях лицензии GNU General Public License, опубликованной Free Software Foundation, а именно ее версии 3 или, по Вашему выбору, любой более поздней.
Эта программа распространяется в надежде на ее пользу, но БЕЗ ЛЮБЫХ ГАРАНТИЙ; в т.ч. без финансовых гарантий или гарантии пользы в практическом применении. Если Вы хотите более детально ознакомиться, это можно сделать, открыв полный текст GNU General Public License.
Вам должны предоставить копию GNU General Public License вместе с этой программой. В случае, если вы не получили копию GNU General Public License, откройте и ознакомьтесь с ней на http://www.gnu.org/licenses/
Программа представлена в виде нескольких файлов один из них - python-ноутбук с кодом на языке программирования Python. он является неотъемлемой частью данной Программы. Все остальные файлы, являющиеся неотъемлемой частью данной Программы и распространяющиеся вместе с этой Программой, предоставляются на условиях той же лицензии GNU General Public License, что и Программа. Программа и файлы, распространяющиеся с ней, доступны по адресу https://github.com/docinit/hormone_therapy_in_children_with_multiple_injuries
Authors
Авторы:
import pandas as pd
import numpy as np
from scipy import stats
from matplotlib import pyplot as plt
import seaborn as sns
import warnings
warnings.filterwarnings("ignore")
sns.set(style='whitegrid', rc={"grid.linewidth": 0.1})
sns.set_context("paper", font_scale=1.8)
Исследуемые параметры:
df = pd.read_csv('../Datasets/improved_08_2020_svm.csv',index_col=0)
# загрузка диагнозов пациентов
df_ds = pd.read_csv("./OCT27/ID_DS.csv")
# диагнозы - в списки
df_ds.Diagnos = [i.split('.') for i in df_ds.Diagnos]
# загрузка предварительно (вручную) обработанных диагнозов (разбиты по группам)
df_ds_class = pd.read_csv('./OCT27//df_ds2.csv')
df_ds = df_ds.explode('Diagnos')
for k,items in enumerate(df_ds_class['Diagnos']):
# items_list=items.split(',')
# for item in items_list:
df_ds.loc[df_ds['Diagnos']==items,'Class'] = df_ds_class['Класс'][k]
# if 'Многооскольчатый перелом нижней челюсти ' in item:
# print(item)
# теперь в таблице диагнозов имеется и группа, к которым они относятся:
# повреждения головы, головного мозга, конечностей и др.
df_ds.head(50)
| ID | Diagnos | Class | |
|---|---|---|---|
| 0 | 1 | Кататравма | Кататравма |
| 0 | 1 | Сочетанная травма | Другое |
| 0 | 1 | ЗЧМТ | Головной мозг |
| 0 | 1 | Ушиб ГМ легкой степени | Головной мозг |
| 0 | 1 | Многооскольчатый перелом нижней челюсти со сме... | Голова |
| 0 | 1 | Двусторонний перелом нижних стенок глазниц,гем... | Голова |
| 0 | 1 | Гематосинус с двух сторон | Гемосинус |
| 0 | 1 | Закрытый перелом правого бедра в среднй трети ... | Конечности |
| 0 | 1 | Постгеморрагическая анемия тяжелой степени | Кровотечение |
| 0 | 1 | NaN | |
| 1 | 2 | Кататравма | Кататравма |
| 1 | 2 | ЗЧМТ | Головной мозг |
| 1 | 2 | Ушиб головного мозга тяжелой степени | Головной мозг |
| 1 | 2 | Линейный перелом височной кости слева | Голова |
| 1 | 2 | Острая эпидуральна гематома левой лобно-теменн... | Голова |
| 1 | 2 | Дислокационый синдром | Головной мозг |
| 1 | 2 | САК | САК |
| 1 | 2 | NaN | |
| 2 | 3 | Автотравма | Автотравма |
| 2 | 3 | Сочетанная травма | Другое |
| 2 | 3 | ЗЧМТ, ушиб головного мозга тяжелой степени | Головной мозг |
| 2 | 3 | Диффузно-аксональное повреждение | Головной мозг |
| 2 | 3 | Очаги контузии в правой теменной доле | Голова |
| 2 | 3 | САК | САК |
| 2 | 3 | Перелом лонной и седалищной котей справа без ... | Таз |
| 2 | 3 | Ушиб передней брюшной стенки | Живот |
| 2 | 3 | NaN | |
| 3 | 4 | Кататравма | Кататравма |
| 3 | 4 | Тупая травма живота, разрыв селезенки | Живот |
| 3 | 4 | Внутрибрюшинное кровотечение | Кровотечение |
| 3 | 4 | NaN | |
| 4 | 5 | Автотравма | Автотравма |
| 4 | 5 | Сочетанная травма | Другое |
| 4 | 5 | ОЧМТ, ушиб головного мозга средней степени тя... | Головной мозг |
| 4 | 5 | Контузионные очаги лобной доли справа, пневмо... | Головной мозг |
| 4 | 5 | Перелом лобной кости справа | Голова |
| 4 | 5 | Перелом верхней и медиальной стенки правой ор... | Голова |
| 4 | 5 | Гематома век OD | Голова |
| 4 | 5 | Ушиб передней брюшной стенки | Живот |
| 4 | 5 | Закрытый перелом наружной лодыжки левого голе... | Конечности |
| 4 | 5 | NaN | |
| 5 | 6 | Кататравма | Кататравма |
| 5 | 6 | ОЧМТ | Головной мозг |
| 5 | 6 | Ушиб ГМ тяжелой степени | Головной мозг |
| 5 | 6 | Вдавленный перелом левой теменной кости | Голова |
| 5 | 6 | Очаг размозжения в левой теменной доле | Головной мозг |
| 5 | 6 | САК | САК |
| 5 | 6 | Ушиб селезенки | Живот |
| 5 | 6 | ШОК I степени от 11 | Шок |
| 5 | 6 | 06 | NaN |
df_ds.dropna(inplace=True)
df_ds.Class = [list(set(i.split(','))) for i in df_ds.Class]
import numpy as np
df_ds = df_ds.explode('Class')
a = [df_ds.loc[df_ds.ID==i,['ID','Class']] for i in df_ds.ID.unique()]
for index in range(len(a)):
a[index].Class= a[index].Class.apply(lambda x: [i for i in a[index].Class.values])
a[index] = a[index].values[0]
a[index][1] = list(set([i for i in a[index][1]]))
pd.options.display.max_rows=300
a = pd.DataFrame(a)
columns = pd.DataFrame(a).explode(1)[1].unique()
patients_ds = pd.DataFrame(columns=columns,index = pd.DataFrame(a)[0])
for i in columns:
for index in patients_ds.index:
patients_ds[i][index] = 1 if i in a.loc[a[0]==index,1].values[0] else 0
patients_ds.head()
patients_ds.loc[patients_ds[['Вклинение ГМ','Кома','Спинной мозг','ВЖК','САК','Головной мозг']].sum(axis=1)>0,'ЦНС']=1
patients_ds.loc[patients_ds[['Ателектазы','Гидроторакс','Аспирация','Гемоторакс','Пневмоторакс','Легкие']].sum(axis=1)>0,'Органы грудной клетки']=1
patients_ds.loc[patients_ds[['МПС','Живот']].sum(axis=1)>0,'Травма живота']=1
patients_ds.loc[patients_ds[['Гемосинус','Голова']].sum(axis=1)>0,'Голова']=1
patients_ds.loc[patients_ds[['Позвонки','Грудь','Голова','Конечности']].sum(axis=1)>0,'ОДА']=1
patients_ds.loc[patients_ds[['ЦНС','ОДА']].sum(axis=1)==2,'ЦНС + ОДА']=1
patients_ds.loc[patients_ds[['ЦНС','Органы грудной клетки']].sum(axis=1)==2,'ЦНС + Органы грудной клетки']=1
patients_ds.loc[patients_ds[['ЦНС','Травма живота']].sum(axis=1)==2,'ЦНС + Травма живота']=1
patients_ds.loc[patients_ds[['ЦНС','Голова']].sum(axis=1)==2,'ЦНС + Голова']=1
patients_ds.loc[patients_ds[['ЦНС','ОДА' ,'Голова']].sum(axis=1)==3,'ЦНС + ОДА + Голова']=1
patients_ds.loc[patients_ds[['ЦНС','ОДА','Органы грудной клетки']].sum(axis=1)==3,'ЦНС + ОДА + Органы грудной клетки']=1
patients_ds.loc[patients_ds[['ЦНС','ОДА','Травма живота']].sum(axis=1)==3,'ЦНС + ОДА + Травма живота']=1
patients_ds.loc[patients_ds[['ЦНС','ОДА','Травма живота','Органы грудной клетки']].sum(axis=1)==4,'ЦНС + ОДА + Травма живота + Органы грудной клетки']=1
patients_ds.loc[patients_ds[['ЦНС','ОДА','Органы грудной клетки','Голова']].sum(axis=1)==4,'ЦНС + ОДА + Органы грудной клетки + Голова']=1
patients_ds.loc[patients_ds[['ЦНС','Травма живота','Органы грудной клетки','Голова']].sum(axis=1)==4,'ЦНС + Травма живота + Органы грудной клетки + Голова']=1
patients_ds.loc[patients_ds[['ЦНС','Травма живота','Голова']].sum(axis=1)==3,'ЦНС + Травма живота + Голова']=1
patients_ds.loc[patients_ds[['ЦНС','Органы грудной клетки','Голова']].sum(axis=1)==3,'ЦНС + Органы грудной клетки + Голова']=1
patients_ds.loc[patients_ds[['ЦНС','Голова']].sum(axis=1)==2,'ЦНС + Голова']=1
patients_ds.loc[patients_ds[['ЦНС','Органы грудной клетки','Травма живота']].sum(axis=1)==3,'ЦНС + Органы грудной клетки + Травма живота']=1
patients_ds.loc[patients_ds[['САК','ВЖК']].sum(axis=1)==2,'САК + ВЖК']=1
# чтение данных
df_plot = df = pd.read_csv('../Datasets/improved_08_2020.csv',index_col=0)
# выбор параметров
target_columns = ['AGE','GT','SBP','DBP','MBP','HR','IA','SpO2','Weight','Cl-','LACT','AMYL','ALT','AST','APTV','VOL_%','CI','B_surface','Diur_p_kg', 'OUTCOME','AIS','PTS','TCMV','TH_count']
df = df[['ID','Day'] + target_columns]
# переименование
df.columns = target_columns = ['ID','Day','Возраст','GT','САД', 'ДАД','СрАД','ЧСС','ИА','SpO2','Масса тела','Cl-','Лактат','Амилаза','АЛТ','АСТ','АЧТВ','Инфузия, % от N','КИ','Площадь тела','Диурез, мл/кг', 'OUTCOME','AIS','PTS','Время ИВЛ','Длительность лечения в ОРИТ']
df[['Время ИВЛ']] = df[['Время ИВЛ']]/24
# описательная статистика
df.groupby('ID').mean()[df.columns[1:-2].drop('OUTCOME')].describe().T
target_columns = ['ID','Day','Возраст','GT','САД', 'ДАД','СрАД','ЧСС','ИА','SpO2','Масса тела','Cl-','Лактат','Амилаза','АЛТ','АСТ','АЧТВ','Инфузия, % от N','КИ','Площадь тела','Диурез, мл/кг', 'OUTCOME']
df[['ID','Время ИВЛ','Длительность лечения в ОРИТ']].groupby('ID').min().describe().T
| count | mean | std | min | 25% | 50% | 75% | max | |
|---|---|---|---|---|---|---|---|---|
| Время ИВЛ | 203.0 | 3.112069 | 5.172696 | 0.0 | 0.0 | 0.5 | 4.0625 | 28.208333 |
| Длительность лечения в ОРИТ | 203.0 | 6.926108 | 6.965933 | 1.0 | 2.0 | 5.0 | 8.0000 | 49.000000 |
print(sorted(df.loc[:,'Cl-'].unique()))
[0.0, 1.2, 31.0, 60.6, 85.0, 87.0, 92.0, 93.0, 93.1, 93.3, 94.0, 95.0, 95.5, 95.8, 96.0, 96.7, 97.0, 97.1, 97.7, 98.0, 98.2, 98.3, 98.4, 98.6, 98.7, 98.9, 99.0, 99.3, 99.4, 99.5, 99.6, 99.7, 99.8, 99.9, 100.0, 100.1, 100.2, 100.3, 100.4, 100.6, 100.7, 100.8, 100.9, 101.0, 101.1, 101.2, 101.3, 101.35, 101.5, 101.6, 101.7, 101.8, 101.9, 102.0, 102.1, 102.3, 102.35, 102.4, 102.45, 102.6, 102.7, 103.0, 103.1, 103.2, 103.3, 103.4, 103.5, 103.6, 103.8, 103.9, 104.0, 104.15, 104.3, 104.4, 104.5, 104.7, 104.8, 105.0, 105.3, 105.6, 105.7, 105.8, 105.9, 106.0, 106.2, 106.5, 106.6, 106.7, 106.9, 107.0, 107.3, 107.4, 107.6, 107.7, 107.8, 108.0, 108.4, 108.5, 108.6, 108.7, 109.0, 109.1, 109.5, 109.8, 109.9, 110.0, 110.2, 110.3, 110.5, 110.7, 111.0, 111.2, 111.5, 111.6, 111.7, 111.9, 112.0, 112.1, 112.3, 112.6, 113.0, 113.4, 113.7, 114.0, 114.2, 115.0, 115.3, 116.0, 116.7, 117.0, 118.0, 118.5, 119.0, 120.0, 121.0, 122.0, 122.6, 123.0, 124.0, 125.0, 126.0, 127.0, 128.0, 129.0, 130.0, 131.0, 132.0, 133.0, 134.0, 135.0, 135.7, 136.0, 137.0, 138.0, 138.5, 139.0, 140.0, 141.0, 142.0, 143.0, 144.0, 144.5, 144.9, 145.0, 146.0, 148.0, 149.0, 149.5, 150.0, 151.0, 152.0, 153.0, 158.0, 159.0, 169.0, 191.0, 193.0, 200.4, 507.0, 1102.0]
# Исправление ошибочных записей;
# Перед этим были проанализированы результаты, получаемые без исправлений:
# выводы, которые получаются в двух случаях, не меняются; исправление влияет только на p-value
# в результатах, касающихся хлоремии
# sorted(df['Cl-'].unique())
df.loc[df['Cl-'] == 1.2,'Cl-'] = 102
df.loc[df['Cl-'] == 0,'Cl-'] = df['Cl-'].mean().copy()
df.loc[df['Cl-'] == 1102,'Cl-'] = 110.2
df.loc[df['Cl-'] == 200.4,'Cl-'] = 100.4
df.loc[df['Cl-'] == 507,'Cl-'] = 107
ds_stat = pd.DataFrame(patients_ds[patients_ds.index.isin(df.ID)].fillna(0).astype(int).sum(axis=0)).sort_values(0)
fig, ax = plt.subplots(figsize=(4,20),dpi=600)
plt.barh(y=ds_stat.index[-25:], width=ds_stat[0][-25:])
plt.xticks(rotation='vertical')
ax.xaxis.tick_top()
ax.set_xlabel('Количество пациентов с повреждениями')
ax.xaxis.set_label_position('top')
plt.show()
# Просмотр: количество детей с разными диагнозами и их сочетанием
ds_stat = ds_stat.set_axis(['Количество'], axis=1)
ds_stat['%'] = ds_stat.iloc[:,0]/203 * 100
ds_stat.sort_values('Количество',ascending=False)
| Количество | % | |
|---|---|---|
| Головной мозг | 191 | 94.088670 |
| ЦНС | 191 | 94.088670 |
| ОДА | 181 | 89.162562 |
| ЦНС + ОДА | 174 | 85.714286 |
| Другое | 130 | 64.039409 |
| Голова | 128 | 63.054187 |
| ЦНС + ОДА + Голова | 128 | 63.054187 |
| ЦНС + Голова | 128 | 63.054187 |
| Травма живота | 101 | 49.753695 |
| Конечности | 100 | 49.261084 |
| ЦНС + Травма живота | 92 | 45.320197 |
| Живот | 92 | 45.320197 |
| ЦНС + ОДА + Травма живота | 84 | 41.379310 |
| Органы грудной клетки | 73 | 35.960591 |
| ЦНС + Органы грудной клетки | 71 | 34.975369 |
| ЦНС + ОДА + Органы грудной клетки | 69 | 33.990148 |
| Легкие | 66 | 32.512315 |
| Автотравма | 63 | 31.034483 |
| Кататравма | 58 | 28.571429 |
| ЦНС + Травма живота + Голова | 58 | 28.571429 |
| ЦНС + ОДА + Органы грудной клетки + Голова | 57 | 28.078818 |
| ЦНС + Органы грудной клетки + Голова | 57 | 28.078818 |
| САК | 48 | 23.645320 |
| ЦНС + Органы грудной клетки + Травма живота | 47 | 23.152709 |
| Грудь | 46 | 22.660099 |
| Шок | 46 | 22.660099 |
| ЦНС + ОДА + Травма живота + Органы грудной клетки | 45 | 22.167488 |
| МПС | 42 | 20.689655 |
| ЦНС + Травма живота + Органы грудной клетки + Голова | 36 | 17.733990 |
| Таз | 35 | 17.241379 |
| Кровотечение | 23 | 11.330049 |
| Позвонки | 21 | 10.344828 |
| Пневмоторакс | 20 | 9.852217 |
| Гемосинус | 19 | 9.359606 |
| Гемоторакс | 12 | 5.911330 |
| ВЖК | 10 | 4.926108 |
| ИВЛ | 9 | 4.433498 |
| САК + ВЖК | 8 | 3.940887 |
| Реанимация | 7 | 3.448276 |
| Спинной мозг | 7 | 3.448276 |
| ДН | 7 | 3.448276 |
| Кома | 7 | 3.448276 |
| ДВС | 6 | 2.955665 |
| Гнойные осложнения | 6 | 2.955665 |
| Вклинение ГМ | 5 | 2.463054 |
| Интоксикация | 5 | 2.463054 |
| Аспирация | 3 | 1.477833 |
| Гидроторакс | 3 | 1.477833 |
| Ателектаз | 2 | 0.985222 |
| Лимфатические протоки | 2 | 0.985222 |
| СН | 1 | 0.492611 |
| Термический ожог | 1 | 0.492611 |
| Электротравма | 1 | 0.492611 |
| СК | 1 | 0.492611 |
| Ателектазы | 1 | 0.492611 |
| НК | 1 | 0.492611 |
df_stat = pd.read_csv('../Datasets/improved_08_2020.csv',index_col=0)
print('\n','Мальчики и девочки, %: \t\t',str([round(i/203 * 100,2) for i in df_stat.groupby('ID').min().SEX.value_counts().values])[1:-1],'\n',\
'Пациенты без ВЖК и с ВЖК, %: \t\t',str([round(i/203 * 100,2) for i in df_stat.groupby('ID').min().ICH.value_counts().values])[1:-1],'\n',\
'Выживших и умерших, %: \t\t',str([round(i/203 * 100,2) for i in df_stat.groupby('ID').min().OUTCOME.value_counts()])[1:-1],'\n',\
'Получавших и не получавших ГТ, %: \t',str([round(i/203 * 100,2) for i in df_stat.groupby('ID').max().GT.value_counts()])[1:-1])
print('\n','Мальчики и девочки: \t\t',str([i for i in df_stat.groupby('ID').min().SEX.value_counts().values])[1:-1],'\n',\
'Пациенты без ВЖК и с ВЖК: \t',str([i for i in df_stat.groupby('ID').min().ICH.value_counts().values])[1:-1],'\n',\
'Выживших и умерших: \t\t',str([i for i in df_stat.groupby('ID').min().OUTCOME.value_counts()])[1:-1],'\n',\
'Получавших и не получавших ГТ: ',str([i for i in df_stat.groupby('ID').max().GT.value_counts()])[1:-1])
plt.figure(figsize=(14,5))
plt.bar(x=['ГТ+', 'ГТ-'],height=df_stat.groupby('ID').max()['GT'].value_counts());
plt.bar(x=['Выжили','Умерли'],height=df_stat.groupby('ID').min()['OUTCOME'].value_counts());
plt.bar(x=['мальчики','девочки'],height=df_stat.groupby('ID').min().SEX.value_counts());
plt.bar(x=['Без ВЖК','ВЖК'],height=df_stat.groupby('ID').min()['ICH'].value_counts());
Мальчики и девочки, %: 63.55, 36.45 Пациенты без ВЖК и с ВЖК, %: 66.5, 33.5 Выживших и умерших, %: 90.64, 9.36 Получавших и не получавших ГТ, %: 55.67, 44.33 Мальчики и девочки: 129, 74 Пациенты без ВЖК и с ВЖК: 135, 68 Выживших и умерших: 184, 19 Получавших и не получавших ГТ: 113, 90
df_stat.groupby('ID').min()[['AIS','PTS','TCMV','TH_count']].describe().set_axis(['AIS','PTS','Время ИВЛ, дни','Время лечения в ОРИТ, дни'],axis=1).\
set_axis(['Количество','Среднее','Стандартное отклонение','Минимальное значение','25-квантиль','Медиана','75-квантиль','Максимальное значение'],axis=0)
| AIS | PTS | Время ИВЛ, дни | Время лечения в ОРИТ, дни | |
|---|---|---|---|---|
| Количество | 203.000000 | 203.000000 | 203.000000 | 203.000000 |
| Среднее | 36.812808 | 5.206897 | 74.689655 | 6.926108 |
| Стандартное отклонение | 15.763237 | 3.587182 | 124.144707 | 6.965933 |
| Минимальное значение | 2.000000 | -2.000000 | 0.000000 | 1.000000 |
| 25-квантиль | 25.000000 | 2.000000 | 0.000000 | 2.000000 |
| Медиана | 34.000000 | 5.000000 | 12.000000 | 5.000000 |
| 75-квантиль | 48.000000 | 8.000000 | 97.500000 | 8.000000 |
| Максимальное значение | 86.000000 | 12.000000 | 677.000000 | 49.000000 |
В данном исследовании пациенты отбирались по следующим критериям:
* наличие сочетанной травмы;
* отсутствие сопутствующих заболеваний;
* возраст до 18 лет;
* необходимость лечения в отделении реанимации и интенсивной терапии.
На графиках бокс-плот видно, что выжившие и умершие пациенты, мальчики и девочки, имеют сходные массу тела и возраст.
df_plot = df_plot[['ID','AGE','SEX','OUTCOME','Weight','Day']].groupby('ID',as_index=False).max()
sns.boxplot(x=df_plot['OUTCOME'].replace({'Died':'умершие','Survived':'выжившие'}),y = df_plot['AGE'])
plt.ylabel('Возраст')
plt.xlabel('Исходы')
plt.show()
sns.boxplot(x=df_plot['OUTCOME'].replace({'Died':'умершие','Survived':'выжившие'}),y = df_plot['Weight'])
plt.ylabel('Масса тела')
plt.xlabel('Исходы')
plt.show()
sns.boxplot(x=df_plot['SEX'].replace({0:'девочки',1:'мальчики'}),y = df_plot['AGE'])
plt.ylabel('Возраст')
plt.xlabel('Пол')
plt.show()
sns.boxplot(x=df_plot['SEX'].replace({0:'девочки',1:'мальчики'}),y = df_plot['Weight'])
plt.ylabel('Масса тела')
plt.xlabel('Пол')
plt.show()
Первый день в ОРИТ:
значения клинико-лабораторных данных при поступлении (т.е. в первый день) могут сильно отличаться от средних значений соответствующих параметров каждого пациента в другие дни из-за проводимой терапии.
Проведенный ниже тест Вилкоксона показывает, что имеется существенная разница между параметрами в 1й день и средними значениями за последующие дни
from scipy.stats import wilcoxon
df = df[target_columns]
df0_ = df.loc[(df.Day>1)&(df.Day<=10),:].groupby('ID',as_index=False).mean().drop('Day',axis=1).copy()
df1_ = df.loc[df.Day==1,:].drop('Day',axis=1).copy()
ids = df0_.ID.unique() # смотрим только пациентов, которые оставались в ОРИТ в период 2-10 день
columns = list(df0_.columns[2:-1])
columns.remove('Масса тела')
columns.remove('Площадь тела')
results = []
break_line = '\n'
for i in columns:
statistics, p = stats.wilcoxon(df0_[i],df1_[df1_.ID.isin(ids)][i])
results.append([i,round(p,3),f'{round(df0_[i].median(),2)} [{round(df0_[i].quantile([0.25]).values[0],2)}-{round(df0_[i].quantile([0.75]).values[0],2)}]',\
f'{round(df1_[df1_.ID.isin(ids)][i].median(),2)} [{round(df1_[df1_.ID.isin(ids)][i].quantile([0.25]).values[0],2)}-{round(df1_[df1_.ID.isin(ids)][i].quantile([0.75]).values[0],2)}]',f'Различие значимо' if p<0.05 else f'Не значимое различие'])
pd.DataFrame(results).set_axis(['Параметр','p_value','1 день','2-10 дни','Значимость'],axis=1)
| Параметр | p_value | 1 день | 2-10 дни | Значимость | |
|---|---|---|---|---|---|
| 0 | GT | 0.001 | 0.12 [0.0-0.75] | 0.0 [0.0-1.0] | Различие значимо |
| 1 | САД | 0.005 | 110.0 [102.67-117.22] | 108.0 [95.0-120.0] | Различие значимо |
| 2 | ДАД | 0.019 | 64.33 [58.89-70.0] | 61.0 [55.0-70.0] | Различие значимо |
| 3 | СрАД | 0.008 | 79.78 [73.33-84.78] | 77.33 [68.33-86.67] | Различие значимо |
| 4 | ЧСС | 0.000 | 105.71 [94.0-115.56] | 110.0 [92.0-125.0] | Различие значимо |
| 5 | ИА | 0.000 | 0.95 [0.83-1.11] | 1.0 [0.83-1.24] | Различие значимо |
| 6 | SpO2 | 0.685 | 98.78 [98.0-99.78] | 99.0 [98.0-100.0] | Не значимое различие |
| 7 | Cl- | 0.700 | 108.89 [104.6-112.89] | 108.74 [104.0-112.0] | Не значимое различие |
| 8 | Лактат | 0.001 | 1.36 [0.0-1.78] | 1.1 [0.0-2.6] | Различие значимо |
| 9 | Амилаза | 0.000 | 35.25 [0.0-94.0] | 18.3 [0.0-49.7] | Различие значимо |
| 10 | АЛТ | 0.000 | 39.48 [18.98-77.55] | 39.6 [15.2-101.5] | Различие значимо |
| 11 | АСТ | 0.000 | 55.81 [34.06-110.0] | 62.5 [28.5-163.4] | Различие значимо |
| 12 | АЧТВ | 0.000 | 28.9 [0.0-33.09] | 25.8 [0.0-31.0] | Различие значимо |
| 13 | Инфузия, % от N | 0.000 | 118.53 [98.96-138.79] | 84.42 [60.99-130.53] | Различие значимо |
| 14 | КИ | 0.072 | 0.0 [0.0-5.31] | 0.0 [0.0-5.0] | Не значимое различие |
# 2 день и 3-10 дни
df0_ = df.loc[(df.Day!=1)&(df.Day!=2)&(df.Day<=10),['ID']+['Day']+columns].groupby('ID',as_index=False).mean().drop('Day',axis=1).copy()
df1_ = df.loc[df.Day==2,['ID']+['Day']+columns].drop('Day',axis=1).copy()
ids = df0_.ID.unique().copy() # смотрим только пациентов, которые оставались в ОРИТ в период 3-10 день
results = []
for i in columns:
statistics, p = stats.wilcoxon(df0_[i],df1_[df1_.ID.isin(ids)][i])
results.append([i,round(p,3),f'Различие значимо' if p<0.05 else f'Не значимое различие'])
print("Различия между значениями параметров на 2й день и средними значениями за последующие дни (до 10го дня)")
pd.DataFrame(results).set_axis(['Параметр','p_value','Значимость'],axis=1)
Различия между значениями параметров на 2й день и средними значениями за последующие дни (до 10го дня)
| Параметр | p_value | Значимость | |
|---|---|---|---|
| 0 | GT | 0.002 | Различие значимо |
| 1 | САД | 0.001 | Различие значимо |
| 2 | ДАД | 0.001 | Различие значимо |
| 3 | СрАД | 0.000 | Различие значимо |
| 4 | ЧСС | 0.000 | Различие значимо |
| 5 | ИА | 0.000 | Различие значимо |
| 6 | SpO2 | 0.012 | Различие значимо |
| 7 | Cl- | 0.002 | Различие значимо |
| 8 | Лактат | 0.072 | Не значимое различие |
| 9 | Амилаза | 0.278 | Не значимое различие |
| 10 | АЛТ | 0.000 | Различие значимо |
| 11 | АСТ | 0.000 | Различие значимо |
| 12 | АЧТВ | 0.336 | Не значимое различие |
| 13 | Инфузия, % от N | 0.020 | Различие значимо |
| 14 | КИ | 0.922 | Не значимое различие |
# в выборку за третий день не попал пациент №17 с неполными данными (строка удалена)
df[df.ID==17][['ID','Day']]
| ID | Day | |
|---|---|---|
| 91 | 17 | 1 |
| 92 | 17 | 2 |
| 93 | 17 | 4 |
# 3 день и 4-10 дни
df0_ = df.loc[(~df.Day.isin([1,2,3]))&(df.Day<=10),['ID']+['Day']+columns].groupby('ID',as_index=False).mean().drop('Day',axis=1).copy()
df1_ = df.loc[df.Day==3,['ID']+['Day']+columns].drop('Day',axis=1).copy()
ids = df0_.ID.unique() # смотрим только пациентов, которые оставались в ОРИТ в период 4-10 день
ids = ids[~np.isin(ids,17)].copy()
# columns = list(df0_.columns[2:-1])
# columns.remove('Масса тела')
# columns.remove('Площадь тела')
results = []
for i in columns:
statistics, p = stats.wilcoxon(df0_[df0_.ID.isin(ids)][i],df1_[df1_.ID.isin(ids)][i])
results.append([i,round(p,3),f'Различие значимо' if p<0.05 else f'Не значимое различие'])
print("Различия между значениями параметров на 3й день и средними значениями за последующие дни (до 10го дня)")
pd.DataFrame(results)
Различия между значениями параметров на 3й день и средними значениями за последующие дни (до 10го дня)
| 0 | 1 | 2 | |
|---|---|---|---|
| 0 | GT | 0.000 | Различие значимо |
| 1 | САД | 0.011 | Различие значимо |
| 2 | ДАД | 0.310 | Не значимое различие |
| 3 | СрАД | 0.066 | Не значимое различие |
| 4 | ЧСС | 0.670 | Не значимое различие |
| 5 | ИА | 0.181 | Не значимое различие |
| 6 | SpO2 | 0.233 | Не значимое различие |
| 7 | Cl- | 0.000 | Различие значимо |
| 8 | Лактат | 0.511 | Не значимое различие |
| 9 | Амилаза | 0.017 | Различие значимо |
| 10 | АЛТ | 0.000 | Различие значимо |
| 11 | АСТ | 0.000 | Различие значимо |
| 12 | АЧТВ | 0.377 | Не значимое различие |
| 13 | Инфузия, % от N | 0.345 | Не значимое различие |
| 14 | КИ | 0.942 | Не значимое различие |
days = list(range(1,8))
df_all = df.loc[df.Day==7,'ID'].unique().copy()
df_all = df.loc[(df.ID.isin(df_all))&(df.Day.isin(days)),:].copy()
df_gt_users = df_all.loc[df_all.GT==1,'ID'].unique().copy()
df_gt = df_all.loc[df_all.ID.isin(df_gt_users),:].copy()
df_nogt = df_all.loc[~df_all.ID.isin(df_gt_users),:].copy()
df_surv = df_all.loc[df_all.OUTCOME=='Survived',:].copy()
# df_surv_gt_users = df_all.loc[(df_all.OUTCOME=='Survived')&(df_all.GT==1),'ID'].unique()
df_surv_gt = df_gt.loc[df_gt.OUTCOME=='Survived',:].copy()
df_surv_nogt = df_nogt.loc[df_nogt.OUTCOME=='Survived',:].copy()
df_died = df_all.loc[df_all.OUTCOME=='Died',:].copy()
# df_died_gt_users = df_all.loc[(df_all.OUTCOME=='Died')&(df_all.GT==1),'ID'].unique()
df_died_gt = df_gt.loc[df_gt.OUTCOME=='Died',:].copy()
df_died_nogt = df_nogt.loc[df_nogt.OUTCOME=='Died',:].copy()
print(f'Всего пациентов, лечившихся 7 и более дней: {df_all.ID.nunique()}\n\
всего пациентов, получавших ГТ: {df_gt.ID.nunique()}\n\
всего пациентов, не получавших ГТ: {df_nogt.ID.nunique()}\n\
выживших пациентов: {df_surv.ID.nunique()}\n\
выживших, получавших ГТ: {df_surv_gt.ID.nunique()}\n\
выживших, не получавших ГТ: {df_surv_nogt.ID.nunique()}\n\
умерших пациентов: {df_died.ID.nunique()}\n\
умерших, получавших ГТ: {df_died_gt.ID.nunique()}\n\
умерших, не получавших ГТ: {df_died_nogt.ID.nunique()}\n\
')
Всего пациентов, лечившихся 7 и более дней: 82 всего пациентов, получавших ГТ: 58 всего пациентов, не получавших ГТ: 24 выживших пациентов: 68 выживших, получавших ГТ: 47 выживших, не получавших ГТ: 21 умерших пациентов: 14 умерших, получавших ГТ: 11 умерших, не получавших ГТ: 3
from scipy.stats import friedmanchisquare
def highlight(x):
color = 'lightgreen' if float(x.split(' ')[-1])<=0.01 else 'lightblue'
return 'background-color: %s' % color
params = list(set(df_all.columns[4:-1])-set(['Масса тела','Площадь тела']))
tab_lists = ['Все пациенты','Получали ГТ','Не получали ГТ', 'Выжили', 'Выжили, получали ГТ', 'Выжили, не получали ГТ', 'Умерли', 'Умерли, получали ГТ','Умерли, не получали ГТ']
results = []
for i in params:
# print('*'*5,i,'*'*(50-len(list(i))))
for k,z in enumerate([df_all,df_gt,df_nogt, df_surv, df_surv_gt, df_surv_nogt, df_died, df_died_gt, df_died_nogt]):
stat,p = friedmanchisquare(z.loc[z.Day==1,i],z.loc[z.Day==2,i],z.loc[z.Day==3,i],z.loc[z.Day==4,i],z.loc[z.Day==5,i],z.loc[z.Day==6,i],z.loc[z.Day==7,i])
# print(tab_lists[k],round(p,4))
values = [round(z[i].median(),2),round(z[i].quantile(0.25),2),round(z[i].quantile(0.75),2),round(p,4)]
results.append([i,tab_lists[k],str(values[0])+';\r\n ['+str(values[1])+', '+str(values[2])+'] p_value ='+' '+str(values[-1])])
a = pd.DataFrame(results)
a = a.pivot(columns = 1,index = 0,values = 2).rename_axis(None, axis=0).rename_axis('Параметры', axis=1).style.applymap(highlight)
a
| Параметры | Все пациенты | Выжили | Выжили, не получали ГТ | Выжили, получали ГТ | Не получали ГТ | Получали ГТ | Умерли | Умерли, не получали ГТ | Умерли, получали ГТ |
|---|---|---|---|---|---|---|---|---|---|
| Cl- | 110.0; [106.0, 116.75] p_value = 0.0002 | 110.0; [105.0, 115.0] p_value = 0.0 | 110.0; [105.5, 116.0] p_value = 0.0523 | 110.0; [105.0, 115.0] p_value = 0.0001 | 110.85; [106.75, 116.0] p_value = 0.2838 | 110.0; [105.3, 117.0] p_value = 0.0007 | 112.0; [108.74, 123.0] p_value = 0.3385 | 112.1; [108.74, 132.0] p_value = 0.3776 | 112.0; [108.74, 123.0] p_value = 0.7231 |
| SpO2 | 99.0; [98.0, 100.0] p_value = 0.6888 | 99.0; [98.0, 100.0] p_value = 0.6282 | 99.0; [97.0, 100.0] p_value = 0.8323 | 99.0; [98.0, 100.0] p_value = 0.2393 | 99.0; [98.0, 100.0] p_value = 0.5531 | 99.0; [98.0, 100.0] p_value = 0.1821 | 98.0; [98.0, 99.0] p_value = 0.1251 | 99.0; [98.0, 100.0] p_value = 0.034 | 98.0; [98.0, 99.0] p_value = 0.0451 |
| АЛТ | 41.3; [21.21, 93.0] p_value = 0.0029 | 38.48; [19.95, 89.52] p_value = 0.0004 | 44.4; [22.25, 117.35] p_value = 0.0117 | 33.7; [19.3, 71.0] p_value = 0.0738 | 44.8; [22.0, 103.55] p_value = 0.0242 | 40.9; [21.02, 85.64] p_value = 0.176 | 66.0; [41.0, 111.5] p_value = 0.8893 | 71.0; [22.0, 72.75] p_value = 0.7574 | 66.0; [42.8, 113.0] p_value = 0.9291 |
| АСТ | 58.75; [36.0, 120.65] p_value = 0.0 | 54.4; [35.38, 100.1] p_value = 0.0 | 60.4; [43.85, 112.95] p_value = 0.0 | 50.6; [33.2, 95.0] p_value = 0.0 | 60.4; [40.04, 125.0] p_value = 0.0 | 57.0; [35.3, 118.52] p_value = 0.0 | 110.5; [45.0, 183.0] p_value = 0.8795 | 85.0; [30.0, 189.0] p_value = 0.8219 | 111.0; [80.0, 177.0] p_value = 0.9413 |
| АЧТВ | 31.0; [24.8, 36.5] p_value = 0.1001 | 31.0; [26.3, 36.62] p_value = 0.0358 | 32.3; [27.0, 39.0] p_value = 0.4393 | 31.0; [26.0, 35.0] p_value = 0.0832 | 32.05; [26.3, 38.39] p_value = 0.3098 | 30.0; [24.0, 35.08] p_value = 0.2805 | 24.5; [0.0, 36.15] p_value = 0.0035 | 25.0; [0.0, 31.5] p_value = 0.0983 | 24.0; [0.0, 37.0] p_value = 0.1185 |
| Амилаза | 51.3; [0.0, 120.69] p_value = 0.0 | 63.85; [27.0, 143.52] p_value = 0.0 | 55.7; [27.5, 102.85] p_value = 0.0019 | 69.4; [27.0, 171.2] p_value = 0.0 | 50.5; [19.22, 101.1] p_value = 0.0019 | 51.3; [0.0, 140.43] p_value = 0.0 | 0.0; [0.0, 0.0] p_value = 0.667 | 0.0; [0.0, 63.4] p_value = 0.4232 | 0.0; [0.0, 0.0] p_value = 0.4232 |
| ДАД | 62.0; [55.0, 70.0] p_value = 0.0019 | 63.0; [55.0, 70.0] p_value = 0.0002 | 65.0; [60.0, 72.0] p_value = 0.4422 | 61.0; [55.0, 70.0] p_value = 0.0001 | 63.0; [58.0, 72.0] p_value = 0.0938 | 61.0; [55.0, 70.0] p_value = 0.0078 | 60.0; [51.0, 74.75] p_value = 0.8088 | 56.0; [51.0, 63.0] p_value = 0.0516 | 64.0; [52.0, 76.0] p_value = 0.1455 |
| Диурез, мл/кг | 48.0; [33.24, 75.5] p_value = 0.0009 | 47.83; [32.98, 75.0] p_value = 0.0033 | 48.46; [34.52, 79.17] p_value = 0.3763 | 47.5; [32.22, 73.33] p_value = 0.0078 | 48.23; [34.75, 79.17] p_value = 0.2918 | 47.83; [32.94, 74.5] p_value = 0.0011 | 49.17; [35.01, 79.0] p_value = 0.5069 | 45.83; [40.54, 79.17] p_value = 0.7555 | 50.0; [34.62, 78.5] p_value = 0.1573 |
| ИА | 0.91; [0.76, 1.09] p_value = 0.0001 | 0.9; [0.74, 1.07] p_value = 0.0001 | 0.93; [0.73, 1.09] p_value = 0.8015 | 0.89; [0.75, 1.06] p_value = 0.0 | 0.97; [0.74, 1.11] p_value = 0.7597 | 0.9; [0.77, 1.08] p_value = 0.0 | 1.0; [0.85, 1.21] p_value = 0.6558 | 1.15; [1.0, 1.29] p_value = 0.7153 | 0.97; [0.83, 1.19] p_value = 0.501 |
| Инфузия, % от N | 118.33; [96.21, 147.46] p_value = 0.0 | 116.16; [94.27, 144.06] p_value = 0.0 | 114.7; [98.83, 145.83] p_value = 0.093 | 117.23; [92.59, 143.75] p_value = 0.0001 | 119.03; [99.96, 147.58] p_value = 0.1117 | 118.26; [94.2, 145.08] p_value = 0.0001 | 131.54; [105.42, 163.3] p_value = 0.8688 | 140.71; [123.12, 163.33] p_value = 0.9197 | 129.17; [102.27, 163.19] p_value = 0.7277 |
| КИ | 5.0; [0.0, 7.5] p_value = 0.0057 | 4.55; [0.0, 5.6] p_value = 0.0064 | 1.3; [0.0, 5.0] p_value = 0.6135 | 5.0; [0.0, 7.0] p_value = 0.0144 | 2.75; [0.0, 7.5] p_value = 0.4063 | 5.0; [0.0, 7.5] p_value = 0.0233 | 7.5; [4.0, 14.0] p_value = 0.0073 | 14.0; [14.0, 30.0] p_value = 0.1265 | 5.0; [2.5, 10.0] p_value = 0.0364 |
| Лактат | 1.2; [0.15, 1.9] p_value = 0.0004 | 1.3; [0.9, 1.9] p_value = 0.0003 | 1.3; [1.0, 1.7] p_value = 0.3905 | 1.3; [0.8, 2.0] p_value = 0.0002 | 1.4; [1.0, 1.8] p_value = 0.6424 | 1.2; [0.0, 2.08] p_value = 0.0001 | 0.0; [0.0, 2.5] p_value = 0.6692 | 1.5; [0.0, 2.6] p_value = 0.6577 | 0.0; [0.0, 2.2] p_value = 0.7321 |
| САД | 110.0; [100.0, 120.0] p_value = 0.0002 | 110.0; [100.0, 120.0] p_value = 0.0 | 115.0; [100.0, 120.0] p_value = 0.332 | 110.0; [100.0, 120.0] p_value = 0.0 | 112.0; [100.0, 120.25] p_value = 0.1962 | 110.0; [100.0, 120.0] p_value = 0.0002 | 106.0; [92.25, 120.0] p_value = 0.7671 | 105.0; [90.0, 121.0] p_value = 0.1746 | 107.0; [95.0, 120.0] p_value = 0.4625 |
| СрАД | 78.33; [71.33, 87.67] p_value = 0.0003 | 78.83; [72.0, 87.33] p_value = 0.0 | 81.0; [73.17, 88.67] p_value = 0.2954 | 78.33; [71.67, 86.67] p_value = 0.0 | 80.0; [71.33, 88.67] p_value = 0.0638 | 78.33; [71.42, 87.33] p_value = 0.0011 | 77.5; [65.0, 89.92] p_value = 0.8761 | 70.0; [65.0, 80.0] p_value = 0.0336 | 78.33; [66.67, 90.0] p_value = 0.3204 |
| ЧСС | 102.0; [88.0, 118.0] p_value = 0.0118 | 100.0; [85.0, 115.25] p_value = 0.0028 | 100.0; [88.0, 115.0] p_value = 0.6786 | 100.0; [84.0, 116.0] p_value = 0.0015 | 102.5; [89.0, 116.25] p_value = 0.6667 | 102.0; [85.25, 118.0] p_value = 0.0149 | 109.5; [95.0, 125.0] p_value = 0.5174 | 115.0; [100.0, 128.0] p_value = 0.9036 | 107.0; [93.0, 122.0] p_value = 0.2744 |
def highlight(x):
color = 'lightgreen' if x<=0.01 else 'lightblue'
return 'background-color: %s' % color
params = list(set(df_all.columns[4:-1])-set(['Масса тела','Площадь тела']))
tab_lists = ['Все пациенты','Получали ГТ','Не получали ГТ', 'Выжили', 'Выжили, получали ГТ', 'Выжили, не получали ГТ', 'Умерли', 'Умерли, получали ГТ','Умерли, не получали ГТ']
results = []
for i in params:
# print('*'*5,i,'*'*(50-len(list(i))))
for k,z in enumerate([df_all,df_gt,df_nogt, df_surv, df_surv_gt, df_surv_nogt, df_died, df_died_gt, df_died_nogt]):
stat,p = friedmanchisquare(z.loc[z.Day==2,i],z.loc[z.Day==3,i],z.loc[z.Day==4,i],z.loc[z.Day==5,i],z.loc[z.Day==6,i],z.loc[z.Day==7,i])
# print(tab_lists[k],round(p,4))
results.append([i,tab_lists[k],round(p,4)])
a = pd.DataFrame(results)
a = a.pivot(columns = 1,index = 0,values = 2).rename_axis(None, axis=0).rename_axis('Параметры', axis=1).style.applymap(highlight)
a
| Параметры | Все пациенты | Выжили | Выжили, не получали ГТ | Выжили, получали ГТ | Не получали ГТ | Получали ГТ | Умерли | Умерли, не получали ГТ | Умерли, получали ГТ |
|---|---|---|---|---|---|---|---|---|---|
| Cl- | 0.000100 | 0.000000 | 0.124400 | 0.000100 | 0.285600 | 0.000400 | 0.890300 | 0.897700 | 0.840200 |
| SpO2 | 0.530800 | 0.468800 | 0.633500 | 0.123900 | 0.579800 | 0.115200 | 0.043800 | 0.152000 | 0.018200 |
| АЛТ | 0.002700 | 0.000200 | 0.004200 | 0.062000 | 0.026000 | 0.116000 | 0.908600 | 0.971000 | 0.893100 |
| АСТ | 0.000000 | 0.000000 | 0.000000 | 0.000000 | 0.000000 | 0.000000 | 0.847400 | 0.784800 | 0.870500 |
| АЧТВ | 0.517700 | 0.051500 | 0.470500 | 0.061700 | 0.549600 | 0.442100 | 0.002200 | 0.102600 | 0.067400 |
| Амилаза | 0.064100 | 0.109600 | 0.016000 | 0.642600 | 0.036500 | 0.539100 | 0.509100 | 0.415900 | 0.415900 |
| ДАД | 0.000600 | 0.000000 | 0.560300 | 0.000000 | 0.159300 | 0.006700 | 0.924700 | 0.068600 | 0.332600 |
| Диурез, мл/кг | 0.004600 | 0.017100 | 0.575500 | 0.011900 | 0.417400 | 0.001600 | 0.410800 | 0.670600 | 0.118700 |
| ИА | 0.009100 | 0.012200 | 0.979000 | 0.001400 | 0.953300 | 0.001100 | 0.598200 | 0.670600 | 0.547900 |
| Инфузия, % от N | 0.119600 | 0.191700 | 0.877900 | 0.187300 | 0.842400 | 0.096200 | 0.749800 | 0.787200 | 0.618000 |
| КИ | 0.977900 | 0.211500 | 0.635800 | 0.248200 | 0.763100 | 0.879800 | 0.014800 | 0.189300 | 0.027800 |
| Лактат | 0.007400 | 0.017000 | 0.325700 | 0.007800 | 0.443900 | 0.003500 | 0.604400 | 0.954000 | 0.593500 |
| САД | 0.000100 | 0.000000 | 0.182400 | 0.000000 | 0.122300 | 0.000100 | 0.521700 | 0.203100 | 0.300800 |
| СрАД | 0.000100 | 0.000000 | 0.417600 | 0.000000 | 0.157700 | 0.000500 | 0.830500 | 0.061400 | 0.476400 |
| ЧСС | 0.156300 | 0.184100 | 0.768200 | 0.083900 | 0.779400 | 0.102000 | 0.519800 | 0.794700 | 0.326600 |
def highlight(x):
color = 'lightgreen' if x<=0.01 else 'lightblue'
return 'background-color: %s' % color
params = list(set(df_all.columns[4:-1])-set(['Масса тела','Площадь тела']))
tab_lists = ['Все пациенты','Получали ГТ','Не получали ГТ', 'Выжили', 'Выжили, получали ГТ', 'Выжили, не получали ГТ', 'Умерли', 'Умерли, получали ГТ','Умерли, не получали ГТ']
results = []
for i in params:
# print('*'*5,i,'*'*(50-len(list(i))))
for k,z in enumerate([df_all,df_gt,df_nogt, df_surv, df_surv_gt, df_surv_nogt, df_died, df_died_gt, df_died_nogt]):
stat,p = friedmanchisquare(z.loc[z.Day==3,i],z.loc[z.Day==4,i],z.loc[z.Day==5,i],z.loc[z.Day==6,i],z.loc[z.Day==7,i])
# print(tab_lists[k],round(p,4))
results.append([i,tab_lists[k],round(p,4)])
a = pd.DataFrame(results)
a = a.pivot(columns = 1,index = 0,values = 2).rename_axis(None, axis=0).rename_axis('Параметры', axis=1).style.applymap(highlight)
a
| Параметры | Все пациенты | Выжили | Выжили, не получали ГТ | Выжили, получали ГТ | Не получали ГТ | Получали ГТ | Умерли | Умерли, не получали ГТ | Умерли, получали ГТ |
|---|---|---|---|---|---|---|---|---|---|
| Cl- | 0.000300 | 0.000000 | 0.356600 | 0.000000 | 0.521500 | 0.000200 | 0.934800 | 0.828400 | 0.784800 |
| SpO2 | 0.900000 | 0.375200 | 0.837300 | 0.248400 | 0.592700 | 0.850500 | 0.262700 | 0.171200 | 0.072900 |
| АЛТ | 0.059800 | 0.021200 | 0.104600 | 0.211900 | 0.268800 | 0.253100 | 0.869600 | 0.961300 | 0.829700 |
| АСТ | 0.000000 | 0.000000 | 0.005700 | 0.000000 | 0.006600 | 0.000000 | 0.627000 | 0.651500 | 0.685900 |
| АЧТВ | 0.185000 | 0.005400 | 0.640200 | 0.008900 | 0.849300 | 0.162500 | 0.000800 | 0.109300 | 0.018300 |
| Амилаза | 0.050200 | 0.115500 | 0.023800 | 0.594900 | 0.028300 | 0.479100 | 0.267400 | 0.406000 | 0.406000 |
| ДАД | 0.018900 | 0.001900 | 0.465500 | 0.003900 | 0.132800 | 0.166300 | 0.875100 | 0.069300 | 0.311800 |
| Диурез, мл/кг | 0.012100 | 0.030000 | 0.414100 | 0.128600 | 0.359400 | 0.052500 | 0.392400 | 0.569000 | 0.143500 |
| ИА | 0.784800 | 0.638700 | 0.902700 | 0.374400 | 0.858700 | 0.375800 | 0.855700 | 0.483000 | 0.576600 |
| Инфузия, % от N | 0.171200 | 0.212800 | 0.751000 | 0.184200 | 0.696000 | 0.104300 | 0.708900 | 0.615100 | 0.478600 |
| КИ | 0.910400 | 0.076400 | 0.423800 | 0.073600 | 0.550400 | 0.679400 | 0.027200 | 0.406000 | 0.019700 |
| Лактат | 0.426500 | 0.500700 | 0.341100 | 0.196800 | 0.508800 | 0.175100 | 0.830200 | 0.926100 | 0.793000 |
| САД | 0.000400 | 0.000000 | 0.074800 | 0.000200 | 0.045100 | 0.004500 | 0.587900 | 0.146000 | 0.201300 |
| СрАД | 0.014200 | 0.001800 | 0.350400 | 0.002900 | 0.162100 | 0.095400 | 0.731700 | 0.058600 | 0.376600 |
| ЧСС | 0.305800 | 0.394200 | 0.650400 | 0.567300 | 0.681000 | 0.452600 | 0.493700 | 0.572100 | 0.246200 |
ИТОГ:
Эти данные согласуются с проведенным ранее (см. выше) тестом Уилкоксона. При этом данный тест позволил выявить группы пациентов, в которых демонстрируются максимальные различия в параметрах на разных сроках лечения.
Ниже мы проследим за этими изменениями на графиках
tab_list = [df_all,df_gt,df_nogt, df_surv, df_surv_gt, df_surv_nogt, df_died, df_died_gt, df_died_nogt]
tab_lists = ['Все пациенты','Получали ГТ','Не получали ГТ', 'Выжили', 'Выжили, получали ГТ', 'Выжили, не получали ГТ', 'Умерли', 'Умерли, получали ГТ','Умерли, не получали ГТ']
fig,axis = plt.subplots(15,9,figsize = (30,75))
for k,z in enumerate(params):
if z!='КИ' and z!='Лактат':
y_max = df_all[z].max()
while y_max>(df_all[z].mean()*5):
y_max = y_max/5
y_min = df_all[z].min()
while y_min<(df_all[z].mean()/5):
y_min = (y_min+1)*5
elif z=='КИ':
y_max = 100
y_min = 0
elif z=='Лактат':
y_max = 20
y_min = 0
for kk,i in enumerate(tab_list):
sns.boxplot(x = tab_list[kk]['Day'], y = tab_list[kk][z],orient='vertical',ax=axis[k,kk],).set_ylabel(None)
axis[k,kk].set_title(f'{z}\n{tab_lists[kk]}')
axis[k,kk].set_ylim(y_min,y_max)
plt.tight_layout()
plt.show()
fig,axis = plt.subplots(15,9,figsize = (30,75))
for k,z in enumerate(params):
if z!='КИ' and z!='Лактат':
y_max = df_all[z].max()
while y_max>(df_all[z].mean()*5):
y_max = y_max/5
y_min = df_all[z].min()
while y_min<(df_all[z].mean()/5):
y_min = (y_min+1)*5
elif z=='КИ':
y_max = 100
y_min = 0
elif z=='Лактат':
y_max = 20
y_min = 0
for kk,i in enumerate(tab_list):
sns.lineplot(x = tab_list[kk]['Day'], y = tab_list[kk][z],ax=axis[k,kk],).set_ylabel(None)
axis[k,kk].set_title(f'{z}\n{tab_lists[kk]}')
axis[k,kk].set_ylim(y_min,y_max)
plt.tight_layout()
plt.show()
# Пример для статьи: систолическое артериальное давление
for k,z in enumerate(["САД"]):
y_max = df_all[z].max()
while y_max>(df_all[z].mean()*5):
y_max = y_max/5
y_min = df_all[z].min()
while y_min<(df_all[z].mean()/5):
y_min = (y_min+1)*5
for kk,i in enumerate(tab_list[-3:]):
sns.lineplot(x = tab_list[-3:][kk]['Day'], y = tab_list[-3:][kk][z]).set_ylabel(None)
if tab_list[-3:][kk]['OUTCOME'].unique()=='Died':
outcome = 'Летальный исход'
else:
outcome = 'Благоприятный исход'
if len(tab_lists[-3:][kk].split(', '))==1:
gt = ""
elif tab_lists[-3:][kk].split(', ')[-1]=='не получали ГТ':
gt = "КС не применялись"
else:
gt = "КС применялись"
title = outcome + str('\n') + gt
plt.title(title)
plt.ylabel('САД\nмм.рт.ст.')
plt.xlabel('День')
plt.ylim(y_min,y_max)
plt.tight_layout()
plt.xticks(np.arange(1, 8, step=1))
# plt.savefig(f'{title}.jpeg', dpi=300, transparent=False)
plt.show()
На графиках светло-голубым цветом обозначены доверительные интервалы средних значений: обращает на себя внимание разные доверительные интервалы средних значений для групп умерших и выживших (у выживших они Уже) и для подгрупп (ГТ+ и ГТ-) в этих же группах (в группах ГТ+ доверительные интервалы также Уже).
В связи с этим добавим новые признаки: 2 стандартных отклонения средних значений для каждого параметра в меньшую и большую сторону.
for i in params:
i_std_min = str(i+'_std_min')
i_std_max = str(i+'_std_max')
for tab in tab_list:
tab[i_std_min]=0
tab[i_std_max]=0
tab.loc[:,i_std_min] = tab[i].mean() - tab[i].std(ddof=1)*2 / np.sqrt(tab.shape[0])
tab.loc[:,i_std_max] = tab[i].mean() + tab[i].std(ddof=1)*2 / np.sqrt(tab.shape[0])
# КИмин,Лактатмин, SPO2max,АЧТВмин, амилаза, САДмин,Хлормин,ДАДмин,СРАДмин, АСТмин,Амилазамакс,амилазамин,хлормакс,лактатмакс
# КИмин,Лактатмин,SPO2max,АЧТВмин,амилаза,САДмин,Хлормин,ДАДмин,СРАДмин, АСТмин,Амилазамакс,амилазамин,хлормакс,лактатмакс,CImax,САДmax,АЛТmin
# КИ,лактат,SpO2,АЧТВ,амилаза,САД,хлор,ДАД,СрАД,АСТ,АЛТ
pd.options.display.max_rows = 350
params2 = df_all.columns[2:].drop(['OUTCOME','GT'])
results2 = []
for day in days:
for i in params2:
# if p<0.05:
# print(i)
# print(df_all.loc[df_all.Day==day,i].median())
results2.append([i,day,df_surv_gt.loc[df_surv_gt.Day==day,i].median(),df_surv_gt.loc[df_surv_gt.Day==day,i].quantile(0.25),df_surv_gt.loc[df_surv_gt.Day==day,i].quantile(0.75),\
df_died_gt.loc[df_died_gt.Day==day,i].median(),df_died_gt.loc[df_died_gt.Day==day,i].quantile(0.25),df_died_gt.loc[df_died_gt.Day==day,i].quantile(0.75),\
df_died_nogt.loc[df_died_nogt.Day==day,i].median(),df_died_nogt.loc[df_died_nogt.Day==day,i].quantile(0.25),df_died_nogt.loc[df_died_nogt.Day==day,i].quantile(0.75)])
# else:
# results2.append([i,day,round(p,4)])
result2_df = pd.DataFrame(results2,columns=['Параметр','День','Медиана в группе выживших пациентов ГТ+','25-квантиль в группе выживших пациентов ГТ+','75-квантиль в группе выживших пациентов ГТ+',\
'Медиана в группе умерших пациентов ГТ+','25-квантиль в группе умерших пациентов ГТ+','75-квантили в группе умерших пациентов ГТ+',\
'Медиана в группе умерших пациентов ГТ-','25-квантиль в группе умерших пациентов ГТ-','75-квантили в группе умерших пациентов ГТ-'])
result2_df.groupby('Параметр',as_index=False).mean()[['Параметр','Медиана в группе выживших пациентов ГТ+','25-квантиль в группе выживших пациентов ГТ+','75-квантиль в группе выживших пациентов ГТ+',\
'Медиана в группе умерших пациентов ГТ+','25-квантиль в группе умерших пациентов ГТ+','75-квантили в группе умерших пациентов ГТ+',\
'Медиана в группе умерших пациентов ГТ-','25-квантиль в группе умерших пациентов ГТ-','75-квантили в группе умерших пациентов ГТ-']].sort_values('Параметр')
| Параметр | Медиана в группе выживших пациентов ГТ+ | 25-квантиль в группе выживших пациентов ГТ+ | 75-квантиль в группе выживших пациентов ГТ+ | Медиана в группе умерших пациентов ГТ+ | 25-квантиль в группе умерших пациентов ГТ+ | 75-квантили в группе умерших пациентов ГТ+ | Медиана в группе умерших пациентов ГТ- | 25-квантиль в группе умерших пациентов ГТ- | 75-квантили в группе умерших пациентов ГТ- | |
|---|---|---|---|---|---|---|---|---|---|---|
| 0 | Cl- | 110.000000 | 105.521429 | 115.000000 | 113.534965 | 107.623876 | 124.357143 | 117.328571 | 112.762787 | 123.288911 |
| 1 | Cl-_std_max | 112.463360 | 112.463360 | 112.463360 | 120.598545 | 120.598545 | 120.598545 | 123.852853 | 123.852853 | 123.852853 |
| 2 | Cl-_std_min | 110.399127 | 110.399127 | 110.399127 | 112.844521 | 112.844521 | 112.844521 | 112.663697 | 112.663697 | 112.663697 |
| 3 | SpO2 | 99.142857 | 97.714286 | 100.000000 | 98.285714 | 97.357143 | 98.785714 | 98.571429 | 98.428571 | 99.142857 |
| 4 | SpO2_std_max | 98.744755 | 98.744755 | 98.744755 | 98.237813 | 98.237813 | 98.237813 | 99.320787 | 99.320787 | 99.320787 |
| 5 | SpO2_std_min | 97.680777 | 97.680777 | 97.680777 | 97.112836 | 97.112836 | 97.112836 | 98.393499 | 98.393499 | 98.393499 |
| 6 | АЛТ | 34.407143 | 19.553571 | 75.914286 | 68.885714 | 43.307143 | 118.178571 | 55.142857 | 37.514286 | 79.260714 |
| 7 | АЛТ_std_max | 101.630837 | 101.630837 | 101.630837 | 150.354012 | 150.354012 | 150.354012 | 77.800417 | 77.800417 | 77.800417 |
| 8 | АЛТ_std_min | 64.213844 | 64.213844 | 64.213844 | 74.344690 | 74.344690 | 74.344690 | 41.137678 | 41.137678 | 41.137678 |
| 9 | АСТ | 56.528571 | 33.967857 | 109.900000 | 110.857143 | 78.700000 | 166.457143 | 116.971429 | 71.707143 | 192.657143 |
| 10 | АСТ_std_max | 134.839104 | 134.839104 | 134.839104 | 223.924074 | 223.924074 | 223.924074 | 212.162012 | 212.162012 | 212.162012 |
| 11 | АСТ_std_min | 87.087948 | 87.087948 | 87.087948 | 118.930471 | 118.930471 | 118.930471 | 62.342750 | 62.342750 | 62.342750 |
| 12 | АЧТВ | 30.571429 | 26.228571 | 35.103571 | 20.571429 | 0.000000 | 35.642857 | 29.114286 | 14.557143 | 32.142857 |
| 13 | АЧТВ_std_max | 29.853693 | 29.853693 | 29.853693 | 25.939146 | 25.939146 | 25.939146 | 28.745690 | 28.745690 | 28.745690 |
| 14 | АЧТВ_std_min | 26.900714 | 26.900714 | 26.900714 | 15.372542 | 15.372542 | 15.372542 | 14.111453 | 14.111453 | 14.111453 |
| 15 | Амилаза | 79.228571 | 26.328571 | 160.578571 | 0.000000 | 0.000000 | 0.000000 | 0.000000 | 0.000000 | 72.239286 |
| 16 | Амилаза_std_max | 167.260358 | 167.260358 | 167.260358 | 31.279607 | 31.279607 | 31.279607 | 90.055758 | 90.055758 | 90.055758 |
| 17 | Амилаза_std_min | 117.076663 | 117.076663 | 117.076663 | 0.616497 | 0.616497 | 0.616497 | 6.263289 | 6.263289 | 6.263289 |
| 18 | Возраст | 11.000000 | 4.000000 | 15.500000 | 5.500000 | 4.916667 | 11.000000 | 12.000000 | 6.500000 | 12.500000 |
| 19 | ДАД | 61.571429 | 55.285714 | 69.642857 | 62.857143 | 52.428571 | 73.500000 | 55.714286 | 52.785714 | 65.642857 |
| 20 | ДАД_std_max | 64.918596 | 64.918596 | 64.918596 | 66.035410 | 66.035410 | 66.035410 | 66.931090 | 66.931090 | 66.931090 |
| 21 | ДАД_std_min | 62.126997 | 62.126997 | 62.126997 | 57.912642 | 57.912642 | 57.912642 | 53.830814 | 53.830814 | 53.830814 |
| 22 | Диурез, мл/кг | 47.762075 | 31.296542 | 75.735034 | 53.646520 | 36.138818 | 73.032458 | 54.103741 | 42.885204 | 75.617347 |
| 23 | Диурез, мл/кг_std_max | 63.021770 | 63.021770 | 63.021770 | 68.303735 | 68.303735 | 68.303735 | 75.868868 | 75.868868 | 75.868868 |
| 24 | Диурез, мл/кг_std_min | 54.168753 | 54.168753 | 54.168753 | 51.484417 | 51.484417 | 51.484417 | 46.065372 | 46.065372 | 46.065372 |
| 25 | ИА | 0.895437 | 0.761131 | 1.074325 | 0.950591 | 0.850068 | 1.147787 | 1.152367 | 1.031930 | 1.239860 |
| 26 | ИА_std_max | 0.985762 | 0.985762 | 0.985762 | 1.164285 | 1.164285 | 1.164285 | 1.218492 | 1.218492 | 1.218492 |
| 27 | ИА_std_min | 0.916680 | 0.916680 | 0.916680 | 0.972164 | 0.972164 | 0.972164 | 1.042316 | 1.042316 | 1.042316 |
| 28 | Инфузия, % от N | 115.434485 | 93.452778 | 142.021434 | 125.263541 | 102.898414 | 157.053333 | 140.750000 | 123.357143 | 156.979167 |
| 29 | Инфузия, % от N_std_max | 128.417599 | 128.417599 | 128.417599 | 145.927057 | 145.927057 | 145.927057 | 154.364573 | 154.364573 | 154.364573 |
| 30 | Инфузия, % от N_std_min | 117.645989 | 117.645989 | 117.645989 | 124.380597 | 124.380597 | 124.380597 | 125.583840 | 125.583840 | 125.583840 |
| 31 | КИ | 4.285714 | 0.000000 | 6.692857 | 5.000000 | 2.071429 | 10.142857 | 19.571429 | 15.178571 | 30.000000 |
| 32 | КИ_std_max | 9.523932 | 9.523932 | 9.523932 | 26.322020 | 26.322020 | 26.322020 | 32.207693 | 32.207693 | 32.207693 |
| 33 | КИ_std_min | 5.571022 | 5.571022 | 5.571022 | 7.781876 | 7.781876 | 7.781876 | 14.982783 | 14.982783 | 14.982783 |
| 34 | Лактат | 1.357143 | 0.707143 | 2.057143 | 0.000000 | 0.000000 | 2.003571 | 1.485714 | 0.742857 | 2.028571 |
| 35 | Лактат_std_max | 1.731334 | 1.731334 | 1.731334 | 2.259601 | 2.259601 | 2.259601 | 1.875307 | 1.875307 | 1.875307 |
| 36 | Лактат_std_min | 1.331583 | 1.331583 | 1.331583 | 0.946893 | 0.946893 | 0.946893 | 0.829455 | 0.829455 | 0.829455 |
| 37 | Масса тела | 45.000000 | 15.000000 | 60.000000 | 25.000000 | 19.500000 | 36.500000 | 40.000000 | 26.000000 | 48.000000 |
| 38 | Площадь тела | 1.030000 | 0.635000 | 1.210000 | 1.210000 | 0.760000 | 1.330000 | 0.730000 | 0.570000 | 0.790000 |
| 39 | САД | 109.857143 | 101.285714 | 118.285714 | 106.714286 | 94.714286 | 119.928571 | 101.142857 | 94.142857 | 114.000000 |
| 40 | САД_std_max | 112.632853 | 112.632853 | 112.632853 | 112.378946 | 112.378946 | 112.378946 | 113.338149 | 113.338149 | 113.338149 |
| 41 | САД_std_min | 109.361068 | 109.361068 | 109.361068 | 101.802872 | 101.802872 | 101.802872 | 96.757090 | 96.757090 | 96.757090 |
| 42 | СрАД | 78.190476 | 72.000000 | 86.714286 | 78.285714 | 67.357143 | 88.857143 | 70.619048 | 66.571429 | 81.642857 |
| 43 | СрАД_std_max | 80.733193 | 80.733193 | 80.733193 | 81.322030 | 81.322030 | 81.322030 | 82.117174 | 82.117174 | 82.117174 |
| 44 | СрАД_std_min | 77.961842 | 77.961842 | 77.961842 | 72.703944 | 72.703944 | 72.703944 | 68.422508 | 68.422508 | 68.422508 |
| 45 | ЧСС | 100.857143 | 85.857143 | 114.142857 | 107.285714 | 91.500000 | 121.785714 | 117.714286 | 107.357143 | 127.071429 |
| 46 | ЧСС_std_max | 105.261074 | 105.261074 | 105.261074 | 113.644871 | 113.644871 | 113.644871 | 126.888715 | 126.888715 | 126.888715 |
| 47 | ЧСС_std_min | 99.991205 | 99.991205 | 99.991205 | 102.459025 | 102.459025 | 102.459025 | 107.206523 | 107.206523 | 107.206523 |
for i in params:
i_std_min = str(i+'_std_min')
i_std_max = str(i+'_std_max')
for tab in tab_list:
tab[i_std_min]=0
tab[i_std_max]=0
for ids in set(tab.ID):
# tab.loc[tab.ID==ids,i_std_min] = (tab[i].mean() + tab[i].std(ddof=1)*2 / np.sqrt(tab.shape[0])) - tab[tab.ID==ids][i].min()
# tab.loc[tab.ID==ids,i_std_max] = tab[tab.ID==ids][i].max() - (tab[i].mean() - tab[i].std(ddof=1)*2 / np.sqrt(tab.shape[0]))
tab.loc[tab.ID==ids,i_std_min] = ((tab[i].mean() + tab[i].std(ddof=1)*2 / np.sqrt(tab.shape[0])) - (tab[i].mean() - tab[i].std(ddof=1)*1.96 / np.sqrt(tab.shape[0]))) - tab[tab.ID==ids][i].min()
tab.loc[tab.ID==ids,i_std_max] = ((tab[i].mean() + tab[i].std(ddof=1)*2 / np.sqrt(tab.shape[0])) - (tab[i].mean() - tab[i].std(ddof=1)*1.96 / np.sqrt(tab.shape[0]))) - tab[tab.ID==ids][i].max()
Теперь с помощью метода Краскела-Уоллиса попытаемся определить, есть ли значимые различия между группами пациентов по изучаемым параметрам
Выбор данного критерия обусловлен непараметрическим распределением данных, независимостью анализируемых выборок (в сформированных группах пациенты не переходят из одной группы в другую) и количеством групп более 2.
# КИмин,Лактатмин, SPO2max,АЧТВмин, амилаза, САДмин,Хлормин,ДАДмин,СРАДмин, АСТмин,Амилазамакс,амилазамин,хлормакс,лактатмакс
# КИмин,Лактатмин,SPO2max,АЧТВмин,амилаза,САДмин,Хлормин,ДАДмин,СРАДмин, АСТмин,Амилазамакс,амилазамин,хлормакс,лактатмакс,CImax,САДmax,АЛТmin
# КИ,лактат,SpO2,АЧТВ,амилаза,САД,хлор,ДАД,СрАД,АСТ,АЛТ
pd.options.display.max_rows = 350
params2 = df_all.columns[2:].drop(['OUTCOME','GT'])
results2 = []
for day in days:
for i in params2:
stat, p = stats.kruskal(df_surv_gt.loc[df_surv_gt.Day==day,i],\
df_died_gt.loc[df_died_gt.Day==day,i],\
df_died_nogt.loc[df_died_nogt.Day==day,i])
# if p<0.05:
# print(i)
# print(df_all.loc[df_all.Day==day,i].median())
results2.append([i,day,round(p,4),df_surv_gt.loc[df_surv_gt.Day==day,i].median(),df_surv_gt.loc[df_surv_gt.Day==day,i].quantile(0.25),df_surv_gt.loc[df_surv_gt.Day==day,i].quantile(0.75),\
df_died_gt.loc[df_died_gt.Day==day,i].median(),df_died_gt.loc[df_died_gt.Day==day,i].quantile(0.25),df_died_gt.loc[df_died_gt.Day==day,i].quantile(0.75),\
df_died_nogt.loc[df_died_nogt.Day==day,i].median(),df_died_nogt.loc[df_died_nogt.Day==day,i].quantile(0.25),df_died_nogt.loc[df_died_nogt.Day==day,i].quantile(0.75)])
# else:
# results2.append([i,day,round(p,4)])
result2_df = pd.DataFrame(results2,columns=['Параметр','День','p-value','Медиана в группе выживших пациентов ГТ+','25-квантиль в группе выживших пациентов ГТ+','75-квантиль в группе выживших пациентов ГТ+',\
'Медиана в группе умерших пациентов ГТ+','25-квантиль в группе умерших пациентов ГТ+','75-квантили в группе умерших пациентов ГТ+',\
'Медиана в группе умерших пациентов ГТ-','25-квантиль в группе умерших пациентов ГТ-','75-квантили в группе умерших пациентов ГТ-'])
result2_df.groupby('Параметр',as_index=False).mean()[['Параметр','p-value','Медиана в группе выживших пациентов ГТ+','25-квантиль в группе выживших пациентов ГТ+','75-квантиль в группе выживших пациентов ГТ+',\
'Медиана в группе умерших пациентов ГТ+','25-квантиль в группе умерших пациентов ГТ+','75-квантили в группе умерших пациентов ГТ+',\
'Медиана в группе умерших пациентов ГТ-','25-квантиль в группе умерших пациентов ГТ-','75-квантили в группе умерших пациентов ГТ-']].sort_values('p-value')
| Параметр | p-value | Медиана в группе выживших пациентов ГТ+ | 25-квантиль в группе выживших пациентов ГТ+ | 75-квантиль в группе выживших пациентов ГТ+ | Медиана в группе умерших пациентов ГТ+ | 25-квантиль в группе умерших пациентов ГТ+ | 75-квантили в группе умерших пациентов ГТ+ | Медиана в группе умерших пациентов ГТ- | 25-квантиль в группе умерших пациентов ГТ- | 75-квантили в группе умерших пациентов ГТ- | |
|---|---|---|---|---|---|---|---|---|---|---|---|
| 33 | КИ_std_min | 0.000000 | 3.913381 | -1.086619 | 3.913381 | 18.354743 | 13.854743 | 18.354743 | 9.052660 | 6.052660 | 10.552660 |
| 36 | Лактат_std_min | 0.000100 | -0.504247 | -0.754247 | 0.395753 | 1.299581 | 0.749581 | 1.299581 | 1.035393 | 0.535393 | 1.035393 |
| 4 | SpO2_std_max | 0.000100 | -98.946662 | -98.946662 | -98.446662 | -97.886273 | -97.886273 | -97.886273 | -98.081984 | -98.581984 | -98.081984 |
| 14 | АЧТВ_std_min | 0.000400 | -23.076551 | -26.076551 | -20.076551 | 10.460938 | -20.039062 | 10.460938 | -10.512106 | -12.012106 | 1.987894 |
| 15 | Амилаза | 0.001129 | 79.228571 | 26.328571 | 160.578571 | 0.000000 | 0.000000 | 0.000000 | 0.000000 | 0.000000 | 72.239286 |
| 41 | САД_std_min | 0.006000 | -96.760933 | -102.260933 | -86.760933 | -81.529686 | -90.029686 | -57.029686 | -73.584752 | -83.084752 | -66.584752 |
| 21 | ДАД_std_min | 0.011100 | -47.236316 | -57.236316 | -42.236316 | -35.958460 | -49.458460 | -21.958460 | -30.030727 | -36.530727 | -30.030727 |
| 2 | Cl-_std_min | 0.015900 | -101.956409 | -104.956409 | -98.406409 | -94.323516 | -102.195893 | -91.823516 | -96.922735 | -97.295113 | -92.922735 |
| 44 | СрАД_std_min | 0.017400 | -66.256362 | -71.256362 | -58.923029 | -52.134762 | -64.801429 | -33.968095 | -45.108948 | -54.608948 | -42.775614 |
| 11 | АСТ_std_min | 0.019400 | 15.973645 | -1.676355 | 25.523645 | 9.943667 | -6.556333 | 62.443667 | 122.821070 | 93.071070 | 125.471070 |
| 16 | Амилаза_std_max | 0.021300 | -82.318142 | -259.718142 | 8.281858 | 30.356480 | 30.356480 | 30.356480 | 82.954544 | -111.945456 | 82.954544 |
| 17 | Амилаза_std_min | 0.024800 | 14.681858 | -3.768142 | 49.681858 | 30.356480 | 30.356480 | 30.356480 | 82.954544 | 65.404544 | 82.954544 |
| 35 | Лактат_std_max | 0.030000 | -2.304247 | -3.554247 | -1.304247 | 1.299581 | -2.000419 | 1.299581 | -1.464607 | -1.614607 | -0.214607 |
| 32 | КИ_std_max | 0.038200 | -1.086619 | -6.586619 | 3.913381 | 10.354743 | -4.645257 | 12.104743 | -12.947340 | -42.447340 | -4.947340 |
| 40 | САД_std_max | 0.038300 | -116.760933 | -129.260933 | -112.760933 | -111.529686 | -121.529686 | -100.529686 | -99.584752 | -112.584752 | -91.084752 |
| 8 | АЛТ_std_min | 0.043700 | 15.842823 | -4.107177 | 23.117823 | 32.449229 | 14.599229 | 40.249229 | 2.296112 | -16.203888 | 11.346112 |
| 31 | КИ | 0.071843 | 4.285714 | 0.000000 | 6.692857 | 5.000000 | 2.071429 | 10.142857 | 19.571429 | 15.178571 | 30.000000 |
| 13 | АЧТВ_std_max | 0.085100 | -34.776551 | -39.276551 | -28.076551 | -13.539062 | -36.539062 | 10.460938 | -26.312106 | -31.412106 | -5.912106 |
| 47 | ЧСС_std_min | 0.173900 | -74.782830 | -85.782830 | -63.782830 | -62.926012 | -75.926012 | -58.926012 | -68.514630 | -69.514630 | -65.514630 |
| 38 | Площадь тела | 0.210500 | 1.030000 | 0.635000 | 1.210000 | 1.210000 | 0.760000 | 1.330000 | 0.730000 | 0.570000 | 0.790000 |
| 24 | Диурез, мл/кг_std_min | 0.214100 | -17.068847 | -28.235513 | -4.989482 | -12.296244 | -27.182209 | -2.348875 | -3.827872 | -8.661205 | 5.249509 |
| 3 | SpO2 | 0.250829 | 99.142857 | 97.714286 | 100.000000 | 98.285714 | 97.357143 | 98.785714 | 98.571429 | 98.428571 | 99.142857 |
| 45 | ЧСС | 0.263029 | 100.857143 | 85.857143 | 114.142857 | 107.285714 | 91.500000 | 121.785714 | 117.714286 | 107.357143 | 127.071429 |
| 9 | АСТ | 0.289171 | 56.528571 | 33.967857 | 109.900000 | 110.857143 | 78.700000 | 166.457143 | 116.971429 | 71.707143 | 192.657143 |
| 6 | АЛТ | 0.294586 | 34.407143 | 19.553571 | 75.914286 | 68.885714 | 43.307143 | 118.178571 | 55.142857 | 37.514286 | 79.260714 |
| 5 | SpO2_std_min | 0.299300 | -95.946662 | -97.446662 | -93.946662 | -95.886273 | -96.886273 | -89.886273 | -96.081984 | -96.581984 | -95.581984 |
| 37 | Масса тела | 0.333600 | 45.000000 | 15.000000 | 60.000000 | 25.000000 | 19.500000 | 36.500000 | 40.000000 | 26.000000 | 48.000000 |
| 43 | СрАД_std_max | 0.335500 | -88.923029 | -96.423029 | -80.923029 | -88.134762 | -93.301429 | -76.134762 | -66.442281 | -81.775614 | -61.442281 |
| 25 | ИА | 0.336514 | 0.895437 | 0.761131 | 1.074325 | 0.950591 | 0.850068 | 1.147787 | 1.152367 | 1.031930 | 1.239860 |
| 12 | АЧТВ | 0.347543 | 30.571429 | 26.228571 | 35.103571 | 20.571429 | 0.000000 | 35.642857 | 29.114286 | 14.557143 | 32.142857 |
| 42 | СрАД | 0.355957 | 78.190476 | 72.000000 | 86.714286 | 78.285714 | 67.357143 | 88.857143 | 70.619048 | 66.571429 | 81.642857 |
| 19 | ДАД | 0.357043 | 61.571429 | 55.285714 | 69.642857 | 62.857143 | 52.428571 | 73.500000 | 55.714286 | 52.785714 | 65.642857 |
| 18 | Возраст | 0.361200 | 11.000000 | 4.000000 | 15.500000 | 5.500000 | 4.916667 | 11.000000 | 12.000000 | 6.500000 | 12.500000 |
| 20 | ДАД_std_max | 0.384600 | -75.236316 | -82.236316 | -65.736316 | -74.958460 | -81.958460 | -63.458460 | -50.030727 | -66.530727 | -48.530727 |
| 0 | Cl- | 0.438771 | 110.000000 | 105.521429 | 115.000000 | 113.534965 | 107.623876 | 124.357143 | 117.328571 | 112.762787 | 123.288911 |
| 27 | ИА_std_min | 0.468900 | -0.614942 | -0.733556 | -0.549000 | -0.575018 | -0.630163 | -0.503098 | -0.707306 | -0.710890 | -0.632300 |
| 34 | Лактат | 0.480129 | 1.357143 | 0.707143 | 2.057143 | 0.000000 | 0.000000 | 2.003571 | 1.485714 | 0.742857 | 2.028571 |
| 28 | Инфузия, % от N | 0.493543 | 115.434485 | 93.452778 | 142.021434 | 125.263541 | 102.898414 | 157.053333 | 140.750000 | 123.357143 | 156.979167 |
| 39 | САД | 0.514200 | 109.857143 | 101.285714 | 118.285714 | 106.714286 | 94.714286 | 119.928571 | 101.142857 | 94.142857 | 114.000000 |
| 29 | Инфузия, % от N_std_max | 0.565500 | -142.771910 | -170.690272 | -112.755242 | -142.419004 | -202.037060 | -124.514065 | -161.215407 | -161.777907 | -156.986241 |
| 22 | Диурез, мл/кг | 0.601714 | 47.762075 | 31.296542 | 75.735034 | 53.646520 | 36.138818 | 73.032458 | 54.103741 | 42.885204 | 75.617347 |
| 23 | Диурез, мл/кг_std_max | 0.673800 | -66.235513 | -114.243450 | -49.382949 | -75.656568 | -117.447713 | -53.182209 | -61.327872 | -85.911205 | -38.679062 |
| 10 | АСТ_std_max | 0.798600 | -52.726355 | -195.376355 | -5.676355 | -54.056333 | -108.056333 | 0.943667 | -40.678930 | -345.478930 | 32.371070 |
| 26 | ИА_std_max | 0.820500 | -1.122085 | -1.416776 | -0.962607 | -1.086396 | -1.304366 | -0.821996 | -1.169672 | -1.221313 | -1.152040 |
| 1 | Cl-_std_max | 0.823000 | -114.956409 | -122.956409 | -108.206409 | -112.323516 | -129.323516 | -104.323516 | -120.922735 | -125.422735 | -111.422735 |
| 30 | Инфузия, % от N_std_min | 0.842300 | -68.919439 | -83.547728 | -54.549017 | -72.419004 | -85.396822 | -49.727081 | -66.007074 | -70.423741 | -57.715407 |
| 46 | ЧСС_std_max | 0.926500 | -119.782830 | -136.782830 | -104.782830 | -118.926012 | -122.926012 | -113.926012 | -115.514630 | -137.014630 | -110.514630 |
| 7 | АЛТ_std_max | 0.979600 | -10.757177 | -154.407177 | 10.692823 | -39.750771 | -94.250771 | 18.249229 | -58.703888 | -100.653888 | -22.453888 |
Далее мы проведем поиск и анализ данных пациентов, значения параметров у которых "выбиваются" из ДИ среднего наиболее часто (использован порог 2/3 записей), т.е. будет предпринята попытка статистического анализа различий между выжившими и умершими пациентами, а также пациентами ГТ+ и ГТ-, которые наиболее сильно отклоняются от средних значений исследуемых параметров в своих группах; возможно, будет обнаружено значительное различие, например, в случае отклонения значений умерших пациентов в меньшую от среднего сторону, а выживших - в большую сторону от среднего значения.
Сначала составлен список пациентов, значения которых отклонялись более, чем на 1,96std
results3 = []
for k,tab in enumerate(tab_list):
for patient in tab.ID.unique():
for day in days:
checks_true = []
checks_false = []
for param in params:
std = tab.loc[tab['Day']==day,param].std(ddof=1)
mean = tab.loc[tab['Day']==day,param].mean()
if mean-1.96*std/np.sqrt(tab[tab['Day']==day].shape[0]) <= tab.loc[(tab['Day']==day)&(tab['ID']==patient),param].values < mean+1.96*std/np.sqrt(tab[tab['Day']==day].shape[0]):
checks_true.append(param)
else:
checks_false.append(param)
results3.append([tab_lists[k],patient,day,checks_true,checks_false])
results3_df = pd.DataFrame(results3, columns = ['Группа пациентов','ID пациента','День лечения','Параметр в пределах среднее +/- 1.96std','Параметры за пределами среднее +/-1.96std'])
results3_df['Количество параметров за пределами 1.96std'] = [len(i) for i in results3_df['Параметры за пределами среднее +/-1.96std']]
results3_df.head()
| Группа пациентов | ID пациента | День лечения | Параметр в пределах среднее +/- 1.96std | Параметры за пределами среднее +/-1.96std | Количество параметров за пределами 1.96std | |
|---|---|---|---|---|---|---|
| 0 | Все пациенты | 3 | 1 | [АЧТВ, Диурез, мл/кг, Амилаза] | [АСТ, АЛТ, КИ, Cl-, САД, ЧСС, Лактат, SpO2, ДА... | 12 |
| 1 | Все пациенты | 3 | 2 | [Амилаза] | [АСТ, АЛТ, КИ, АЧТВ, Диурез, мл/кг, Cl-, САД, ... | 14 |
| 2 | Все пациенты | 3 | 3 | [АЧТВ, Инфузия, % от N] | [АСТ, АЛТ, КИ, Диурез, мл/кг, Cl-, САД, ЧСС, Л... | 13 |
| 3 | Все пациенты | 3 | 4 | [АСТ, АЧТВ, САД, ЧСС, ДАД, СрАД, Амилаза] | [АЛТ, КИ, Диурез, мл/кг, Cl-, Лактат, SpO2, Ин... | 8 |
| 4 | Все пациенты | 3 | 5 | [АСТ, АЧТВ, САД, ДАД, СрАД] | [АЛТ, КИ, Диурез, мл/кг, Cl-, ЧСС, Лактат, SpO... | 10 |
print("Количество значений, отклоняющихся от среднего более, чем на 1.96 std в группе ГТ-")
results3_df[results3_df['Группа пациентов']=='Не получали ГТ'].sort_values('Количество параметров за пределами 1.96std',ascending=False)['Количество параметров за пределами 1.96std'].sum()
Количество значений, отклоняющихся от среднего более, чем на 1.96 std в группе ГТ-
1693
print("Количество значений, отклоняющихся от среднего более, чем на 1.96 std в группе ГТ+")
results3_df[results3_df['Группа пациентов']=='Получали ГТ'].sort_values('Количество параметров за пределами 1.96std',ascending=False)['Количество параметров за пределами 1.96std'].sum()
Количество значений, отклоняющихся от среднего более, чем на 1.96 std в группе ГТ+
4566
Также получен список пациентов, значения которых отклонялись на 1std от среднего
results4 = []
for k,tab in enumerate(tab_list):
for patient in tab.ID.unique():
for day in days:
checks_true = []
checks_false = []
for param in params:
std = tab.loc[tab['Day']==day,param].std(ddof=1)
mean = tab.loc[tab['Day']==day,param].mean()
if mean-1*std/np.sqrt(tab[tab['Day']==day].shape[0]) <= tab.loc[(tab['Day']==day)&(tab['ID']==patient),param].values < mean+1*std/np.sqrt(tab[tab['Day']==day].shape[0]):
checks_true.append(param)
else:
checks_false.append(param)
results4.append([tab_lists[k],patient,day,checks_true,checks_false])
results4_df = pd.DataFrame(results4, columns = ['Группа пациентов','ID пациента','День лечения','Параметр в пределах среднее +/- 1std','Параметры за пределами среднее +/-1std'])
results4_df['Количество параметров за пределами 1std'] = [len(i) for i in results4_df['Параметры за пределами среднее +/-1std']]
results4_df.head()
| Группа пациентов | ID пациента | День лечения | Параметр в пределах среднее +/- 1std | Параметры за пределами среднее +/-1std | Количество параметров за пределами 1std | |
|---|---|---|---|---|---|---|
| 0 | Все пациенты | 3 | 1 | [АЧТВ, Диурез, мл/кг] | [АСТ, АЛТ, КИ, Cl-, САД, ЧСС, Лактат, SpO2, ДА... | 13 |
| 1 | Все пациенты | 3 | 2 | [] | [АСТ, АЛТ, КИ, АЧТВ, Диурез, мл/кг, Cl-, САД, ... | 15 |
| 2 | Все пациенты | 3 | 3 | [Инфузия, % от N] | [АСТ, АЛТ, КИ, АЧТВ, Диурез, мл/кг, Cl-, САД, ... | 14 |
| 3 | Все пациенты | 3 | 4 | [АСТ, ДАД, СрАД, Амилаза] | [АЛТ, КИ, АЧТВ, Диурез, мл/кг, Cl-, САД, ЧСС, ... | 11 |
| 4 | Все пациенты | 3 | 5 | [АСТ, САД, ДАД, СрАД] | [АЛТ, КИ, АЧТВ, Диурез, мл/кг, Cl-, ЧСС, Лакта... | 11 |
print("Количество значений, отклоняющихся от среднего более, чем на 1 std в группе ГТ-")
results4_df[results4_df['Группа пациентов']=='Не получали ГТ'].sort_values('Количество параметров за пределами 1std',ascending=False)['Количество параметров за пределами 1std'].sum()
Количество значений, отклоняющихся от среднего более, чем на 1 std в группе ГТ-
2124
print("Количество значений, отклоняющихся от среднего более, чем на 1 std в группе ГТ+")
results4_df[results4_df['Группа пациентов']=='Получали ГТ'].sort_values('Количество параметров за пределами 1std',ascending=False)['Количество параметров за пределами 1std'].sum()
Количество значений, отклоняющихся от среднего более, чем на 1 std в группе ГТ+
5321
print(f'{len(params)} параметров\n{df_gt.ID.nunique()} пациентов получали ГТ\n{df_nogt.ID.nunique()} пациентов не получали ГТ')
15 параметров 58 пациентов получали ГТ 24 пациентов не получали ГТ
Итак: всего 15 наблюдаемых параметров
В группе не получавших ГТ: 24 пациентов - и в ней всего 1655 из 15х24х7=2520 (т.е. 65.67%) записей не попадают в пределы средних значений.
В группе, получавшей ГТ: 58 пациента - и в ней всего 4431 из 15(параметров)х58(пациентов)х7(дней)=6090 (т.е. 72.76%) записей не попадают в пределы средних значений
В группе не получавших ГТ: 24 пациентов - и в ней всего 2092 из 15х24х7=2520 (т.е. 83.02%) записей не попадают в пределы средних значений.
В группе, получавшей ГТ: 58 пациента - и в ней всего 5249 из 15(параметров)х58(пациентов)х7(дней)=6090 (т.е. 86.19%) записей не попадают в пределы средних значений
Ниже мы посмотрим, что это за пациенты: сколько параметров у каждого из них отстоит слишком далеко от среднего по выборке (т.е. "группе").
a = results3_df[results3_df['Группа пациентов']=='Получали ГТ'].sort_values('Количество параметров за пределами 1.96std',ascending=False).groupby(['ID пациента','День лечения'],as_index=False)['Количество параметров за пределами 1.96std'].sum()
# a.head(50)
b = results3_df[results3_df['Группа пациентов']=='Не получали ГТ'].sort_values('Количество параметров за пределами 1.96std',ascending=False).groupby(['ID пациента','День лечения'],as_index=False)['Количество параметров за пределами 1.96std'].sum()
# b
a = a.rename(columns={'ID пациента':'ID'}).groupby('ID',as_index=False).sum().sort_values('Количество параметров за пределами 1.96std')[['ID','Количество параметров за пределами 1.96std']].merge(df.groupby('ID',as_index=False)[['Day','OUTCOME']].max(),on='ID',how='left')
a['Количество записей'] = 15 * a['Day']
a['За переделами ДИ, %'] = a['Количество параметров за пределами 1.96std'] * 100 / a['Количество записей']
print('Группа ГТ+')
a.sort_values('За переделами ДИ, %',ascending=False)
Группа ГТ+
| ID | Количество параметров за пределами 1.96std | Day | OUTCOME | Количество записей | За переделами ДИ, % | |
|---|---|---|---|---|---|---|
| 51 | 125 | 88 | 7 | Survived | 105 | 83.809524 |
| 50 | 94 | 88 | 7 | Died | 105 | 83.809524 |
| 57 | 201 | 100 | 8 | Survived | 120 | 83.333333 |
| 47 | 49 | 87 | 7 | Survived | 105 | 82.857143 |
| 46 | 122 | 85 | 7 | Died | 105 | 80.952381 |
| 44 | 128 | 85 | 7 | Died | 105 | 80.952381 |
| 42 | 121 | 84 | 7 | Survived | 105 | 80.000000 |
| 39 | 8 | 83 | 7 | Survived | 105 | 79.047619 |
| 55 | 79 | 94 | 8 | Died | 120 | 78.333333 |
| 38 | 6 | 82 | 7 | Survived | 105 | 78.095238 |
| 52 | 55 | 90 | 8 | Survived | 120 | 75.000000 |
| 41 | 208 | 84 | 8 | Survived | 120 | 70.000000 |
| 10 | 41 | 71 | 7 | Survived | 105 | 67.619048 |
| 29 | 50 | 79 | 8 | Survived | 120 | 65.833333 |
| 5 | 212 | 69 | 7 | Survived | 105 | 65.714286 |
| 56 | 179 | 98 | 10 | Survived | 150 | 65.333333 |
| 48 | 200 | 88 | 9 | Survived | 135 | 65.185185 |
| 25 | 53 | 78 | 8 | Survived | 120 | 65.000000 |
| 22 | 40 | 77 | 8 | Survived | 120 | 64.166667 |
| 24 | 116 | 77 | 8 | Survived | 120 | 64.166667 |
| 45 | 92 | 85 | 9 | Died | 135 | 62.962963 |
| 54 | 34 | 94 | 10 | Survived | 150 | 62.666667 |
| 43 | 108 | 84 | 9 | Survived | 135 | 62.222222 |
| 19 | 103 | 74 | 8 | Survived | 120 | 61.666667 |
| 17 | 37 | 73 | 8 | Survived | 120 | 60.833333 |
| 12 | 81 | 72 | 8 | Survived | 120 | 60.000000 |
| 13 | 89 | 72 | 8 | Died | 120 | 60.000000 |
| 9 | 39 | 71 | 8 | Survived | 120 | 59.166667 |
| 6 | 84 | 71 | 8 | Survived | 120 | 59.166667 |
| 3 | 57 | 66 | 8 | Survived | 120 | 55.000000 |
| 34 | 58 | 80 | 10 | Died | 150 | 53.333333 |
| 49 | 214 | 88 | 11 | Survived | 165 | 53.333333 |
| 7 | 97 | 71 | 9 | Survived | 135 | 52.592593 |
| 23 | 19 | 77 | 10 | Survived | 150 | 51.333333 |
| 37 | 205 | 82 | 12 | Died | 180 | 45.555556 |
| 11 | 71 | 71 | 11 | Survived | 165 | 43.030303 |
| 40 | 96 | 83 | 13 | Died | 195 | 42.564103 |
| 1 | 70 | 62 | 10 | Survived | 150 | 41.333333 |
| 32 | 65 | 80 | 13 | Survived | 195 | 41.025641 |
| 0 | 213 | 53 | 9 | Survived | 135 | 39.259259 |
| 28 | 68 | 79 | 15 | Survived | 225 | 35.111111 |
| 31 | 31 | 79 | 16 | Survived | 240 | 32.916667 |
| 18 | 87 | 73 | 15 | Survived | 225 | 32.444444 |
| 35 | 64 | 81 | 17 | Survived | 255 | 31.764706 |
| 8 | 32 | 71 | 15 | Survived | 225 | 31.555556 |
| 27 | 95 | 79 | 17 | Died | 255 | 30.980392 |
| 36 | 18 | 81 | 18 | Survived | 270 | 30.000000 |
| 30 | 33 | 79 | 19 | Survived | 285 | 27.719298 |
| 20 | 74 | 74 | 18 | Survived | 270 | 27.407407 |
| 33 | 59 | 80 | 21 | Survived | 315 | 25.396825 |
| 4 | 3 | 68 | 19 | Survived | 285 | 23.859649 |
| 26 | 61 | 78 | 22 | Survived | 330 | 23.636364 |
| 53 | 88 | 91 | 27 | Survived | 405 | 22.469136 |
| 16 | 90 | 73 | 25 | Died | 375 | 19.466667 |
| 15 | 86 | 73 | 30 | Survived | 450 | 16.222222 |
| 2 | 85 | 63 | 31 | Survived | 465 | 13.548387 |
| 14 | 60 | 73 | 42 | Survived | 630 | 11.587302 |
| 21 | 120 | 75 | 49 | Survived | 735 | 10.204082 |
a_non1 = results3_df.loc[(results3_df['Группа пациентов']=='Получали ГТ')&(results3_df['День лечения']>1),:].sort_values('Количество параметров за пределами 1.96std',ascending=False).groupby(['ID пациента','День лечения'],as_index=False)['Количество параметров за пределами 1.96std'].sum()
a_non1 = a_non1.rename(columns={'ID пациента':'ID'}).groupby('ID',as_index=False).sum().sort_values('Количество параметров за пределами 1.96std')[['ID','Количество параметров за пределами 1.96std']].merge(df.groupby('ID',as_index=False)[['Day','OUTCOME']].max(),on='ID',how='left')
a_non1['Количество записей'] = 15 * a_non1['Day']
a_non1['За переделами ДИ, %'] = a_non1['Количество параметров за пределами 1.96std'] * 100 / a_non1['Количество записей']
print('Группа ГТ+')
a_non1.sort_values('За переделами ДИ, %',ascending=False)
Группа ГТ+
| ID | Количество параметров за пределами 1.96std | Day | OUTCOME | Количество записей | За переделами ДИ, % | |
|---|---|---|---|---|---|---|
| 52 | 125 | 78 | 7 | Survived | 105 | 74.285714 |
| 50 | 94 | 77 | 7 | Died | 105 | 73.333333 |
| 57 | 201 | 86 | 8 | Survived | 120 | 71.666667 |
| 46 | 49 | 74 | 7 | Survived | 105 | 70.476190 |
| 44 | 8 | 73 | 7 | Survived | 105 | 69.523810 |
| 42 | 122 | 72 | 7 | Died | 105 | 68.571429 |
| 43 | 128 | 72 | 7 | Died | 105 | 68.571429 |
| 37 | 121 | 71 | 7 | Survived | 105 | 67.619048 |
| 55 | 79 | 81 | 8 | Died | 120 | 67.500000 |
| 35 | 6 | 70 | 7 | Survived | 105 | 66.666667 |
| 49 | 55 | 77 | 8 | Survived | 120 | 64.166667 |
| 45 | 208 | 73 | 8 | Survived | 120 | 60.833333 |
| 33 | 53 | 69 | 8 | Survived | 120 | 57.500000 |
| 14 | 41 | 60 | 7 | Survived | 105 | 57.142857 |
| 56 | 179 | 85 | 10 | Survived | 150 | 56.666667 |
| 48 | 200 | 76 | 9 | Survived | 135 | 56.296296 |
| 5 | 212 | 59 | 7 | Survived | 105 | 56.190476 |
| 26 | 116 | 67 | 8 | Survived | 120 | 55.833333 |
| 21 | 50 | 66 | 8 | Survived | 120 | 55.000000 |
| 47 | 108 | 74 | 9 | Survived | 135 | 54.814815 |
| 20 | 84 | 65 | 8 | Survived | 120 | 54.166667 |
| 19 | 89 | 65 | 8 | Died | 120 | 54.166667 |
| 18 | 37 | 65 | 8 | Survived | 120 | 54.166667 |
| 41 | 92 | 72 | 9 | Died | 135 | 53.333333 |
| 53 | 34 | 79 | 10 | Survived | 150 | 52.666667 |
| 17 | 40 | 62 | 8 | Survived | 120 | 51.666667 |
| 16 | 81 | 62 | 8 | Survived | 120 | 51.666667 |
| 8 | 103 | 60 | 8 | Survived | 120 | 50.000000 |
| 7 | 57 | 59 | 8 | Survived | 120 | 49.166667 |
| 6 | 39 | 59 | 8 | Survived | 120 | 49.166667 |
| 54 | 214 | 80 | 11 | Survived | 165 | 48.484848 |
| 29 | 58 | 68 | 10 | Died | 150 | 45.333333 |
| 24 | 19 | 67 | 10 | Survived | 150 | 44.666667 |
| 9 | 97 | 60 | 9 | Survived | 135 | 44.444444 |
| 40 | 205 | 71 | 12 | Died | 180 | 39.444444 |
| 13 | 71 | 60 | 11 | Survived | 165 | 36.363636 |
| 36 | 96 | 70 | 13 | Died | 195 | 35.897436 |
| 1 | 70 | 52 | 10 | Survived | 150 | 34.666667 |
| 23 | 65 | 67 | 13 | Survived | 195 | 34.358974 |
| 0 | 213 | 44 | 9 | Survived | 135 | 32.592593 |
| 34 | 68 | 70 | 15 | Survived | 225 | 31.111111 |
| 38 | 31 | 71 | 16 | Survived | 240 | 29.583333 |
| 39 | 64 | 71 | 17 | Survived | 255 | 27.843137 |
| 11 | 87 | 60 | 15 | Survived | 225 | 26.666667 |
| 32 | 95 | 68 | 17 | Died | 255 | 26.666667 |
| 3 | 32 | 58 | 15 | Survived | 225 | 25.777778 |
| 31 | 18 | 68 | 18 | Survived | 270 | 25.185185 |
| 25 | 74 | 67 | 18 | Survived | 270 | 24.814815 |
| 30 | 33 | 68 | 19 | Survived | 285 | 23.859649 |
| 27 | 59 | 67 | 21 | Survived | 315 | 21.269841 |
| 22 | 61 | 66 | 22 | Survived | 330 | 20.000000 |
| 2 | 3 | 56 | 19 | Survived | 285 | 19.649123 |
| 51 | 88 | 78 | 27 | Survived | 405 | 19.259259 |
| 10 | 90 | 60 | 25 | Died | 375 | 16.000000 |
| 15 | 86 | 62 | 30 | Survived | 450 | 13.777778 |
| 4 | 85 | 58 | 31 | Survived | 465 | 12.473118 |
| 12 | 60 | 60 | 42 | Survived | 630 | 9.523810 |
| 28 | 120 | 68 | 49 | Survived | 735 | 9.251701 |
print('Группа ГТ-')
b = b.rename(columns={'ID пациента':'ID'}).groupby('ID',as_index=False).sum().sort_values('Количество параметров за пределами 1.96std')[['ID','Количество параметров за пределами 1.96std']].merge(df.groupby('ID',as_index=False)[['Day','OUTCOME']].max(),on='ID',how='left')
b['Количество записей'] = 15 * b['Day']
b['За переделами ДИ, %'] = a['Количество параметров за пределами 1.96std'] * 100 / a['Количество записей']
b.sort_values('За переделами ДИ, %',ascending=False)
Группа ГТ-
| ID | Количество параметров за пределами 1.96std | Day | OUTCOME | Количество записей | За переделами ДИ, % | |
|---|---|---|---|---|---|---|
| 10 | 83 | 69 | 12 | Survived | 180 | 67.619048 |
| 5 | 99 | 62 | 8 | Survived | 120 | 65.714286 |
| 22 | 29 | 87 | 9 | Survived | 135 | 64.166667 |
| 19 | 45 | 79 | 8 | Survived | 120 | 61.666667 |
| 17 | 129 | 74 | 7 | Died | 105 | 60.833333 |
| 12 | 75 | 71 | 12 | Survived | 180 | 60.000000 |
| 13 | 62 | 72 | 35 | Survived | 525 | 60.000000 |
| 6 | 105 | 63 | 11 | Survived | 165 | 59.166667 |
| 9 | 115 | 68 | 7 | Survived | 105 | 59.166667 |
| 3 | 7 | 62 | 7 | Survived | 105 | 55.000000 |
| 7 | 98 | 65 | 8 | Survived | 120 | 52.592593 |
| 23 | 203 | 90 | 12 | Survived | 180 | 51.333333 |
| 11 | 51 | 70 | 8 | Survived | 120 | 43.030303 |
| 1 | 67 | 59 | 16 | Survived | 240 | 41.333333 |
| 0 | 119 | 57 | 10 | Survived | 150 | 39.259259 |
| 18 | 66 | 76 | 8 | Died | 120 | 32.444444 |
| 8 | 93 | 67 | 11 | Died | 165 | 31.555556 |
| 20 | 82 | 79 | 9 | Survived | 135 | 27.407407 |
| 4 | 46 | 62 | 8 | Survived | 120 | 23.859649 |
| 16 | 47 | 74 | 8 | Survived | 120 | 19.466667 |
| 15 | 211 | 73 | 11 | Survived | 165 | 16.222222 |
| 2 | 63 | 60 | 19 | Survived | 285 | 13.548387 |
| 14 | 72 | 73 | 12 | Survived | 180 | 11.587302 |
| 21 | 54 | 81 | 7 | Survived | 105 | 10.204082 |
b_non1 = results3_df.loc[(results3_df['Группа пациентов']=='Не получали ГТ')&(results3_df['День лечения']>1),:].sort_values('Количество параметров за пределами 1.96std',ascending=False).groupby(['ID пациента','День лечения'],as_index=False)['Количество параметров за пределами 1.96std'].sum()
b_non1 = b_non1.rename(columns={'ID пациента':'ID'}).groupby('ID',as_index=False).sum().sort_values('Количество параметров за пределами 1.96std')[['ID','Количество параметров за пределами 1.96std']].merge(df.groupby('ID',as_index=False)[['Day','OUTCOME']].max(),on='ID',how='left')
b_non1['Количество записей'] = 15 * b_non1['Day']
b_non1['За переделами ДИ, %'] = b_non1['Количество параметров за пределами 1.96std'] * 100 / b_non1['Количество записей']
print('Группа ГТ- (без данных за 1й день)')
b_non1.sort_values('За переделами ДИ, %',ascending=False)
Группа ГТ- (без данных за 1й день)
| ID | Количество параметров за пределами 1.96std | Day | OUTCOME | Количество записей | За переделами ДИ, % | |
|---|---|---|---|---|---|---|
| 20 | 54 | 69 | 7 | Survived | 105 | 65.714286 |
| 13 | 129 | 62 | 7 | Died | 105 | 59.047619 |
| 19 | 66 | 68 | 8 | Died | 120 | 56.666667 |
| 18 | 45 | 66 | 8 | Survived | 120 | 55.000000 |
| 22 | 29 | 74 | 9 | Survived | 135 | 54.814815 |
| 8 | 115 | 56 | 7 | Survived | 105 | 53.333333 |
| 21 | 82 | 71 | 9 | Survived | 135 | 52.592593 |
| 5 | 7 | 54 | 7 | Survived | 105 | 51.428571 |
| 12 | 47 | 61 | 8 | Survived | 120 | 50.833333 |
| 11 | 51 | 58 | 8 | Survived | 120 | 48.333333 |
| 7 | 99 | 55 | 8 | Survived | 120 | 45.833333 |
| 4 | 46 | 52 | 8 | Survived | 120 | 43.333333 |
| 23 | 203 | 77 | 12 | Survived | 180 | 42.777778 |
| 3 | 98 | 51 | 8 | Survived | 120 | 42.500000 |
| 17 | 211 | 64 | 11 | Survived | 165 | 38.787879 |
| 9 | 93 | 57 | 11 | Died | 165 | 34.545455 |
| 14 | 72 | 62 | 12 | Survived | 180 | 34.444444 |
| 15 | 75 | 62 | 12 | Survived | 180 | 34.444444 |
| 6 | 105 | 54 | 11 | Survived | 165 | 32.727273 |
| 10 | 83 | 57 | 12 | Survived | 180 | 31.666667 |
| 0 | 119 | 47 | 10 | Survived | 150 | 31.333333 |
| 1 | 67 | 47 | 16 | Survived | 240 | 19.583333 |
| 2 | 63 | 49 | 19 | Survived | 285 | 17.192982 |
| 16 | 62 | 63 | 35 | Survived | 525 | 12.000000 |
patients = a[a['За переделами ДИ, %']>35]['ID'].unique()
df.loc[df.ID.isin(patients),['ID','OUTCOME']].groupby('ID').min().sort_values('OUTCOME').value_counts()
OUTCOME Survived 32 Died 9 dtype: int64
tab_list = [df.loc[(df.ID.isin(patients))&(df.OUTCOME=='Died'),:],df.loc[(df.ID.isin(patients))&(df.OUTCOME=='Survived'),:]]
tab_lists = ['Умерли, >35% значений выходят за рамки 1.96 std','Выжили, >35% значений выходят за рамки 1.96 std']
fig,axis = plt.subplots(15,2,figsize = (30,75))
for k,z in enumerate(params):
if z!='КИ' and z!='Лактат':
y_max = df_all[z].max()
while y_max>(df_all[z].mean()*5):
y_max = y_max/5
y_min = df_all[z].min()
while y_min<(df_all[z].mean()/5):
y_min = (y_min+1)*5
elif z=='КИ':
y_max = 100
y_min = 0
elif z=='Лактат':
y_max = 20
y_min = 0
for kk,i in enumerate(tab_list):
sns.lineplot(x = tab_list[kk]['Day'], y = tab_list[kk][z],ax=axis[k,kk],).set_ylabel(None)
axis[k,kk].set_title(f'{z}\n{tab_lists[kk]}')
axis[k,kk].set_ylim(y_min,y_max)
plt.tight_layout()
plt.show()
tab_list = [df.loc[(df.ID.isin(patients))&(df.OUTCOME=='Died'),:],df.loc[(~df.ID.isin(patients))&(df.OUTCOME=='Died')&(df.GT==1),:]]
tab_lists = ['Умерли, >5% значений выходят за рамки 1.96 std','Умерли, <5% значений выходят за рамки 1.96 std']
fig,axis = plt.subplots(15,2,figsize = (30,75))
for k,z in enumerate(params):
if z!='КИ' and z!='Лактат':
y_max = df_all[z].max()
while y_max>(df_all[z].mean()*5):
y_max = y_max/5
y_min = df_all[z].min()
while y_min<(df_all[z].mean()/5):
y_min = (y_min+1)*5
elif z=='КИ':
y_max = 100
y_min = 0
elif z=='Лактат':
y_max = 20
y_min = 0
for kk,i in enumerate(tab_list):
sns.lineplot(x = tab_list[kk]['Day'], y = tab_list[kk][z],ax=axis[k,kk],).set_ylabel(None)
axis[k,kk].set_title(f'{z}\n{tab_lists[kk]}')
axis[k,kk].set_ylim(y_min,y_max)
plt.tight_layout()
plt.show()
tab_list = [df.loc[(df.ID.isin(patients))&(df.OUTCOME=='Survived'),:],df.loc[(~df.ID.isin(patients))&(df.OUTCOME=='Survived')&(df.GT==1),:]]
tab_lists = ['Выжили, >5% значений выходят за рамки 1.96 std','Выжили, <5% значений выходят за рамки 1.96 std']
fig,axis = plt.subplots(15,2,figsize = (30,75))
for k,z in enumerate(params):
if z!='КИ' and z!='Лактат':
y_max = df_all[z].max()
while y_max>(df_all[z].mean()*5):
y_max = y_max/5
y_min = df_all[z].min()
while y_min<(df_all[z].mean()/5):
y_min = (y_min+1)*5
elif z=='КИ':
y_max = 100
y_min = 0
elif z=='Лактат':
y_max = 20
y_min = 0
for kk,i in enumerate(tab_list):
sns.lineplot(x = tab_list[kk]['Day'], y = tab_list[kk][z],ax=axis[k,kk],).set_ylabel(None)
axis[k,kk].set_title(f'{z}\n{tab_lists[kk]}')
axis[k,kk].set_ylim(y_min,y_max)
plt.tight_layout()
plt.show()
# Умершие и получавшие ГТ, выходящие >35% раз за пределы 1.96 std
df.loc[(df.ID.isin(patients))&(df.OUTCOME=='Died'),params].describe().T
| count | mean | std | min | 25% | 50% | 75% | max | |
|---|---|---|---|---|---|---|---|---|
| АСТ | 81.0 | 138.992593 | 230.256034 | 0.000000 | 38.000000 | 104.000000 | 120.500000 | 1678.400000 |
| АЛТ | 81.0 | 107.038272 | 164.535558 | 0.000000 | 42.800000 | 66.000000 | 112.000000 | 1293.200000 |
| КИ | 81.0 | 24.203704 | 44.244829 | 0.000000 | 4.000000 | 7.500000 | 20.000000 | 246.000000 |
| АЧТВ | 81.0 | 25.203704 | 22.245755 | 0.000000 | 0.000000 | 29.000000 | 38.000000 | 120.000000 |
| Диурез, мл/кг | 81.0 | 54.841746 | 37.424546 | 2.325581 | 31.000000 | 42.500000 | 70.930233 | 179.500000 |
| Cl- | 81.0 | 116.684667 | 15.616053 | 93.000000 | 108.744756 | 111.000000 | 124.000000 | 159.000000 |
| САД | 81.0 | 105.802469 | 26.448261 | 45.000000 | 89.000000 | 102.000000 | 120.000000 | 165.000000 |
| ЧСС | 81.0 | 106.716049 | 25.233031 | 41.000000 | 95.000000 | 105.000000 | 121.000000 | 186.000000 |
| Лактат | 81.0 | 1.553704 | 2.819195 | 0.000000 | 0.000000 | 0.000000 | 2.200000 | 13.000000 |
| SpO2 | 81.0 | 96.469136 | 4.965094 | 69.000000 | 97.000000 | 98.000000 | 99.000000 | 100.000000 |
| ДАД | 81.0 | 59.543210 | 17.674169 | 17.000000 | 50.000000 | 60.000000 | 75.000000 | 99.000000 |
| Инфузия, % от N | 81.0 | 137.262723 | 49.689497 | 11.952941 | 107.954545 | 133.058824 | 167.058824 | 300.176471 |
| СрАД | 81.0 | 74.962963 | 20.015827 | 26.333333 | 60.000000 | 75.666667 | 90.000000 | 120.666667 |
| ИА | 81.0 | 1.071906 | 0.419976 | 0.512500 | 0.811966 | 1.000000 | 1.196078 | 3.100000 |
| Амилаза | 81.0 | 15.716049 | 65.716291 | 0.000000 | 0.000000 | 0.000000 | 0.000000 | 485.000000 |
# Умершие и получавшие ГТ, выходящие <35% раз за пределы 1.96 std
zz = df.loc[(~df.ID.isin(patients))&(df.OUTCOME=='Died')&(df.GT==1),'ID'].unique()
df.loc[df['ID'].isin(zz),params].describe().T
| count | mean | std | min | 25% | 50% | 75% | max | |
|---|---|---|---|---|---|---|---|---|
| АСТ | 51.0 | 249.749020 | 359.553565 | 0.000000 | 135.750000 | 183.000000 | 241.000000 | 2458.300000 |
| АЛТ | 51.0 | 150.007843 | 396.617281 | 0.000000 | 37.000000 | 113.000000 | 113.000000 | 2865.000000 |
| КИ | 51.0 | 31.649020 | 134.363695 | 0.000000 | 5.000000 | 7.500000 | 12.500000 | 956.600000 |
| АЧТВ | 51.0 | 14.760784 | 41.795861 | 0.000000 | 0.000000 | 0.000000 | 0.000000 | 162.000000 |
| Диурез, мл/кг | 51.0 | 55.783472 | 32.164732 | 0.000000 | 38.666667 | 56.666667 | 72.166667 | 169.230769 |
| Cl- | 51.0 | 123.962745 | 20.895329 | 60.600000 | 107.000000 | 122.000000 | 139.000000 | 193.000000 |
| САД | 51.0 | 101.392157 | 18.328206 | 60.000000 | 90.000000 | 108.000000 | 115.000000 | 136.000000 |
| ЧСС | 51.0 | 97.156863 | 23.931045 | 50.000000 | 85.000000 | 98.000000 | 110.000000 | 160.000000 |
| Лактат | 51.0 | 3.309804 | 4.422850 | 0.000000 | 0.000000 | 2.200000 | 4.700000 | 20.000000 |
| SpO2 | 51.0 | 97.196078 | 4.841568 | 70.000000 | 98.000000 | 98.000000 | 99.000000 | 100.000000 |
| ДАД | 51.0 | 58.294118 | 15.811760 | 30.000000 | 46.500000 | 58.000000 | 70.000000 | 93.000000 |
| Инфузия, % от N | 51.0 | 106.096787 | 36.034563 | 22.773279 | 81.849436 | 98.082192 | 124.295094 | 238.833333 |
| СрАД | 51.0 | 72.660131 | 15.457970 | 43.333333 | 60.166667 | 73.333333 | 85.000000 | 105.333333 |
| ИА | 51.0 | 0.981681 | 0.310853 | 0.464000 | 0.834250 | 0.939759 | 1.004505 | 2.285714 |
| Амилаза | 51.0 | 37.117647 | 155.360439 | 0.000000 | 0.000000 | 0.000000 | 0.000000 | 892.000000 |
# Выжившие и получавшие ГТ, выходящие >35% раз за пределы 1.96 std
df.loc[(df.ID.isin(patients))&(df.OUTCOME=='Survived'),params].describe().T
| count | mean | std | min | 25% | 50% | 75% | max | |
|---|---|---|---|---|---|---|---|---|
| АСТ | 279.0 | 103.561470 | 191.853238 | 0.000000 | 30.775000 | 48.800000 | 93.150000 | 1958.500000 |
| АЛТ | 279.0 | 82.555018 | 166.169682 | 0.000000 | 18.000000 | 32.100000 | 77.500000 | 1885.200000 |
| КИ | 279.0 | 4.144301 | 8.788512 | 0.000000 | 0.000000 | 2.000000 | 5.000000 | 80.000000 |
| АЧТВ | 279.0 | 26.235484 | 13.969495 | 0.000000 | 25.550000 | 30.000000 | 33.600000 | 90.000000 |
| Диурез, мл/кг | 279.0 | 58.899759 | 36.560919 | 6.250000 | 31.000000 | 50.000000 | 85.147059 | 213.333333 |
| Cl- | 279.0 | 109.051594 | 7.113460 | 93.000000 | 104.000000 | 109.000000 | 113.000000 | 140.000000 |
| САД | 279.0 | 111.240143 | 14.905809 | 50.000000 | 100.000000 | 110.000000 | 120.000000 | 163.000000 |
| ЧСС | 279.0 | 103.917563 | 22.993517 | 60.000000 | 89.000000 | 102.000000 | 117.000000 | 173.000000 |
| Лактат | 279.0 | 1.344265 | 1.786531 | 0.000000 | 0.700000 | 1.200000 | 1.775000 | 25.000000 |
| SpO2 | 279.0 | 98.025090 | 5.019682 | 26.000000 | 97.000000 | 99.000000 | 100.000000 | 110.000000 |
| ДАД | 279.0 | 64.792115 | 12.819155 | 20.000000 | 55.000000 | 65.000000 | 70.000000 | 100.000000 |
| Инфузия, % от N | 279.0 | 122.037904 | 40.138101 | 0.000000 | 95.163564 | 118.750000 | 140.501773 | 248.226950 |
| СрАД | 279.0 | 80.274791 | 12.665000 | 30.000000 | 72.666667 | 78.333333 | 88.333333 | 117.666667 |
| ИА | 279.0 | 0.959554 | 0.299938 | 0.461538 | 0.779661 | 0.916667 | 1.073684 | 2.800000 |
| Амилаза | 279.0 | 101.991900 | 136.836008 | 0.000000 | 0.000000 | 52.950000 | 140.600000 | 858.100000 |
# Выжившие и получавшие ГТ, выходящие <35% раз за пределы 1.96 std
zz = df.loc[(~df.ID.isin(patients))&(df.OUTCOME=='Survived')&(df.GT==1),'ID'].unique()
df.loc[df['ID'].isin(zz),params].describe().T
| count | mean | std | min | 25% | 50% | 75% | max | |
|---|---|---|---|---|---|---|---|---|
| АСТ | 539.0 | 83.116883 | 171.055642 | 0.000000 | 30.900000 | 47.000000 | 71.450000 | 2130.600000 |
| АЛТ | 539.0 | 62.866030 | 103.634318 | 0.000000 | 24.800000 | 39.200000 | 62.000000 | 1260.700000 |
| КИ | 539.0 | 6.895195 | 16.636284 | 0.000000 | 0.000000 | 5.000000 | 7.000000 | 199.200000 |
| АЧТВ | 539.0 | 27.443321 | 14.223236 | 0.000000 | 25.000000 | 30.700000 | 35.000000 | 125.000000 |
| Диурез, мл/кг | 539.0 | 52.484779 | 35.346584 | 1.571429 | 29.427273 | 44.230769 | 65.557143 | 280.000000 |
| Cl- | 539.0 | 111.630740 | 11.806822 | 31.000000 | 104.000000 | 108.744756 | 115.500000 | 169.000000 |
| САД | 539.0 | 113.445269 | 13.522330 | 70.000000 | 105.000000 | 115.000000 | 120.000000 | 170.000000 |
| ЧСС | 539.0 | 107.597403 | 23.253318 | 24.000000 | 90.000000 | 110.000000 | 120.000000 | 180.000000 |
| Лактат | 539.0 | 1.479963 | 1.148871 | -1.100000 | 0.900000 | 1.300000 | 2.000000 | 9.000000 |
| SpO2 | 539.0 | 98.864564 | 1.836795 | 76.000000 | 98.000000 | 100.000000 | 100.000000 | 100.000000 |
| ДАД | 539.0 | 66.764378 | 11.686827 | 5.000000 | 60.000000 | 67.000000 | 75.000000 | 110.000000 |
| Инфузия, % от N | 539.0 | 128.060960 | 62.974068 | 14.166667 | 96.604167 | 118.333333 | 143.875000 | 647.916667 |
| СрАД | 539.0 | 82.324675 | 11.341655 | 40.000000 | 73.666667 | 83.333333 | 90.000000 | 116.666667 |
| ИА | 539.0 | 0.966743 | 0.267056 | 0.200000 | 0.781385 | 0.923077 | 1.097619 | 2.133333 |
| Амилаза | 539.0 | 140.336679 | 194.971722 | 0.000000 | 41.500000 | 82.000000 | 163.050000 | 1940.000000 |
pd.options.display.max_rows = 350
params2 = df_all.columns[1:].drop(['OUTCOME','GT'])
results5 = []
df1 = df_all.loc[(df_all.ID.isin(patients))&(df_all.OUTCOME=='Survived')&(df.GT==1),params2] # выжили, имели >35% случаев отклонения более 1.96*std
df2 = df_all.loc[(df_all.ID.isin(patients))&(df_all.OUTCOME=='Died')&(df.GT==1),params2] # умерли, имели >35% случаев отклонения более 1.96*std
df3 = df_all.loc[(df_all.ID.isin(patients))&(df_all.OUTCOME=='Survived')&(df.GT==0),params2] # выжили, имели <35% случаев отклонения более 1.96*std
df4 = df_all.loc[(df_all.ID.isin(patients))&(df_all.OUTCOME=='Died')&(df.GT==0),params2] # умерли, имели <35% случаев отклонения более 2*std
for tab in [df1,df2,df3,df4]:
for i in params:
i_std_min = str(i+'_std_min')
i_std_max = str(i+'_std_max')
tab.loc[:,i_std_min] = tab[i].mean() - tab[i].std(ddof=1)*2 / np.sqrt(tab.shape[0])
tab.loc[:,i_std_max] = tab[i].mean() + tab[i].std(ddof=1)*2 / np.sqrt(tab.shape[0])
for i in params2:
results5.append([i,\
df1.loc[:,i].median(),df1.loc[:,i].quantile(0.25),df1.loc[:,i].quantile(0.75),\
df2.loc[:,i].median(),df2.loc[:,i].quantile(0.25),df2.loc[:,i].quantile(0.75),\
df3.loc[:,i].median(),df3.loc[:,i].quantile(0.25),df3.loc[:,i].quantile(0.75),\
df4.loc[:,i].median(),df4.loc[:,i].quantile(0.25),df4.loc[:,i].quantile(0.75)])
# print('Разница не доказана:',p)
results5_df = pd.DataFrame(results5,columns=['Параметр','Медиана в группе выживших ГТ+ с отклонениями >35% (1)','25-квантиль в группе выживших с отклонениями >35% (1)','75-квантили в группе выживших с отклонениями >35% (1)',\
'Медиана в группе умерших ГТ+ с отклонениями >35% (2)','25-квантиль в группе умерших с отклонениями >35% (2)','75-квантили в группе умерших с отклонениями >35% (2)',\
'Медиана в группе выживших ГТ- с отклонениями >35% (3)','25-квантиль в группе выживших с отклонениями >35% (3)','75-квантили в группе выживших с отклонениями >35% (3)',\
'Медиана в группе умерших ГТ- с отклонениями >35% (4)','25-квантиль в группе умерших с отклонениями >35% (4)','75-квантили в группе умерших с отклонениями >35% (4)'])
results5_df.groupby('Параметр',as_index=False).mean().sort_values('Параметр')
| Параметр | Медиана в группе выживших ГТ+ с отклонениями >35% (1) | 25-квантиль в группе выживших с отклонениями >35% (1) | 75-квантили в группе выживших с отклонениями >35% (1) | Медиана в группе умерших ГТ+ с отклонениями >35% (2) | 25-квантиль в группе умерших с отклонениями >35% (2) | 75-квантили в группе умерших с отклонениями >35% (2) | Медиана в группе выживших ГТ- с отклонениями >35% (3) | 25-квантиль в группе выживших с отклонениями >35% (3) | 75-квантили в группе выживших с отклонениями >35% (3) | Медиана в группе умерших ГТ- с отклонениями >35% (4) | 25-квантиль в группе умерших с отклонениями >35% (4) | 75-квантили в группе умерших с отклонениями >35% (4) | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 0 | Cl- | 109.250000 | 104.625000 | 115.000000 | 111.500000 | 107.872378 | 125.500000 | 108.000000 | 104.000000 | 113.000000 | 110.000000 | 107.875000 | 115.875000 |
| 1 | Cl-_std_max | 111.190536 | 111.190536 | 111.190536 | 122.951405 | 122.951405 | 122.951405 | 110.783806 | 110.783806 | 110.783806 | 114.373224 | 114.373224 | 114.373224 |
| 2 | Cl-_std_min | 108.624460 | 108.624460 | 108.624460 | 112.558272 | 112.558272 | 112.558272 | 107.611092 | 107.611092 | 107.611092 | 106.076776 | 106.076776 | 106.076776 |
| 3 | Day | 3.000000 | 2.000000 | 5.000000 | 3.000000 | 2.000000 | 5.500000 | 5.000000 | 3.000000 | 6.000000 | 5.000000 | 3.750000 | 6.000000 |
| 4 | SpO2 | 99.000000 | 97.000000 | 100.000000 | 98.000000 | 97.000000 | 99.000000 | 99.000000 | 97.000000 | 100.000000 | 98.000000 | 98.000000 | 99.000000 |
| 5 | SpO2_std_max | 98.676056 | 98.676056 | 98.676056 | 98.182675 | 98.182675 | 98.182675 | 98.905699 | 98.905699 | 98.905699 | 98.882580 | 98.882580 | 98.882580 |
| 6 | SpO2_std_min | 96.149340 | 96.149340 | 96.149340 | 96.375464 | 96.375464 | 96.375464 | 98.033077 | 98.033077 | 98.033077 | 97.117420 | 97.117420 | 97.117420 |
| 7 | АЛТ | 56.850000 | 20.250000 | 129.875000 | 66.000000 | 42.800000 | 189.850000 | 27.100000 | 18.000000 | 44.937500 | 44.900000 | 37.625000 | 108.250000 |
| 8 | АЛТ_std_max | 166.050454 | 166.050454 | 166.050454 | 211.536627 | 211.536627 | 211.536627 | 68.466008 | 68.466008 | 68.466008 | 89.173500 | 89.173500 | 89.173500 |
| 9 | АЛТ_std_min | 84.197959 | 84.197959 | 84.197959 | 80.751745 | 80.751745 | 80.751745 | 38.919706 | 38.919706 | 38.919706 | 43.296500 | 43.296500 | 43.296500 |
| 10 | АСТ | 58.100000 | 35.900000 | 171.775000 | 111.000000 | 80.000000 | 163.850000 | 40.800000 | 30.012500 | 86.000000 | 104.000000 | 30.250000 | 110.000000 |
| 11 | АСТ_std_max | 204.152844 | 204.152844 | 204.152844 | 300.522963 | 300.522963 | 300.522963 | 77.716480 | 77.716480 | 77.716480 | 99.280709 | 99.280709 | 99.280709 |
| 12 | АСТ_std_min | 108.072552 | 108.072552 | 108.072552 | 120.193316 | 120.193316 | 120.193316 | 52.675357 | 52.675357 | 52.675357 | 50.519291 | 50.519291 | 50.519291 |
| 13 | АЧТВ | 29.200000 | 23.250000 | 33.000000 | 32.000000 | 0.000000 | 38.000000 | 30.000000 | 27.125000 | 34.225000 | 24.000000 | 0.000000 | 43.000000 |
| 14 | АЧТВ_std_max | 27.802407 | 27.802407 | 27.802407 | 35.716800 | 35.716800 | 35.716800 | 29.931855 | 29.931855 | 29.931855 | 27.378952 | 27.378952 | 27.378952 |
| 15 | АЧТВ_std_min | 22.338070 | 22.338070 | 22.338070 | 20.678549 | 20.678549 | 20.678549 | 24.307941 | 24.307941 | 24.307941 | 10.421048 | 10.421048 | 10.421048 |
| 16 | Амилаза | 52.700000 | 0.000000 | 146.100000 | 0.000000 | 0.000000 | 0.000000 | 47.850000 | 0.000000 | 122.600000 | 0.000000 | 0.000000 | 0.000000 |
| 17 | Амилаза_std_max | 137.858227 | 137.858227 | 137.858227 | 55.527734 | 55.527734 | 55.527734 | 102.140490 | 102.140490 | 102.140490 | 0.000000 | 0.000000 | 0.000000 |
| 18 | Амилаза_std_min | 81.598757 | 81.598757 | 81.598757 | 1.588545 | 1.588545 | 1.588545 | 59.824816 | 59.824816 | 59.824816 | 0.000000 | 0.000000 | 0.000000 |
| 19 | Возраст | 7.000000 | 3.000000 | 15.000000 | 5.000000 | 1.000000 | 5.500000 | 8.000000 | 3.250000 | 12.000000 | 13.000000 | 5.250000 | 14.000000 |
| 20 | ДАД | 60.000000 | 55.000000 | 70.000000 | 55.000000 | 45.000000 | 69.500000 | 65.000000 | 55.250000 | 70.000000 | 70.000000 | 60.000000 | 77.250000 |
| 21 | ДАД_std_max | 64.776769 | 64.776769 | 64.776769 | 60.554162 | 60.554162 | 60.554162 | 68.381583 | 68.381583 | 68.381583 | 76.664302 | 76.664302 | 76.664302 |
| 22 | ДАД_std_min | 60.096247 | 60.096247 | 60.096247 | 49.724907 | 49.724907 | 49.724907 | 63.230662 | 63.230662 | 63.230662 | 66.235698 | 66.235698 | 66.235698 |
| 23 | Диурез, мл/кг | 49.388889 | 33.323077 | 74.750000 | 50.000000 | 31.500000 | 83.166667 | 49.166667 | 30.714286 | 87.325000 | 42.500000 | 31.986842 | 68.313953 |
| 24 | Диурез, мл/кг_std_max | 64.985096 | 64.985096 | 64.985096 | 76.563606 | 76.563606 | 76.563606 | 67.682935 | 67.682935 | 67.682935 | 62.232870 | 62.232870 | 62.232870 |
| 25 | Диурез, мл/кг_std_min | 51.793901 | 51.793901 | 51.793901 | 49.517129 | 49.517129 | 49.517129 | 52.852218 | 52.852218 | 52.852218 | 38.272809 | 38.272809 | 38.272809 |
| 26 | ИА | 0.949138 | 0.804545 | 1.097727 | 1.097345 | 0.950495 | 1.343561 | 0.884620 | 0.730938 | 1.019565 | 0.834058 | 0.716717 | 0.970000 |
| 27 | ИА_std_max | 1.062755 | 1.062755 | 1.062755 | 1.369969 | 1.369969 | 1.369969 | 0.955339 | 0.955339 | 0.955339 | 0.952757 | 0.952757 | 0.952757 |
| 28 | ИА_std_min | 0.936115 | 0.936115 | 0.936115 | 1.076544 | 1.076544 | 1.076544 | 0.856081 | 0.856081 | 0.856081 | 0.773127 | 0.773127 | 0.773127 |
| 29 | Инфузия, % от N | 115.000000 | 84.760417 | 139.476629 | 138.823529 | 101.553030 | 175.764706 | 121.428571 | 98.640351 | 141.308027 | 133.746130 | 128.296246 | 149.583333 |
| 30 | Инфузия, % от N_std_max | 122.292214 | 122.292214 | 122.292214 | 161.930251 | 161.930251 | 161.930251 | 133.554005 | 133.554005 | 133.554005 | 148.153050 | 148.153050 | 148.153050 |
| 31 | Инфузия, % от N_std_min | 108.590233 | 108.590233 | 108.590233 | 127.175842 | 127.175842 | 127.175842 | 117.174376 | 117.174376 | 117.174376 | 129.109527 | 129.109527 | 129.109527 |
| 32 | КИ | 2.500000 | 0.000000 | 5.000000 | 7.500000 | 2.000000 | 20.000000 | 0.000000 | 0.000000 | 5.000000 | 4.500000 | 0.000000 | 5.000000 |
| 33 | КИ_std_max | 7.671621 | 7.671621 | 7.671621 | 40.391058 | 40.391058 | 40.391058 | 4.178785 | 4.178785 | 4.178785 | 17.892236 | 17.892236 | 17.892236 |
| 34 | КИ_std_min | 3.494411 | 3.494411 | 3.494411 | 8.725221 | 8.725221 | 8.725221 | 1.898766 | 1.898766 | 1.898766 | 1.057764 | 1.057764 | 1.057764 |
| 35 | Лактат | 1.200000 | 0.725000 | 1.700000 | 0.000000 | 0.000000 | 3.550000 | 1.100000 | 0.000000 | 1.687500 | 0.000000 | 0.000000 | 2.500000 |
| 36 | Лактат_std_max | 1.580760 | 1.580760 | 1.580760 | 3.272938 | 3.272938 | 3.272938 | 1.875177 | 1.875177 | 1.875177 | 1.980700 | 1.980700 | 1.980700 |
| 37 | Лактат_std_min | 1.145430 | 1.145430 | 1.145430 | 1.099155 | 1.099155 | 1.099155 | 0.813598 | 0.813598 | 0.813598 | 0.484300 | 0.484300 | 0.484300 |
| 38 | Масса тела | 29.000000 | 14.000000 | 60.000000 | 20.000000 | 12.000000 | 25.000000 | 30.000000 | 15.000000 | 50.000000 | 43.000000 | 19.000000 | 50.000000 |
| 39 | Площадь тела | 0.970000 | 0.610000 | 1.195000 | 1.210000 | 0.550000 | 1.330000 | 0.970000 | 0.670000 | 1.150000 | 1.210000 | 1.090000 | 1.330000 |
| 40 | САД | 110.000000 | 100.000000 | 116.000000 | 101.000000 | 82.500000 | 111.500000 | 112.500000 | 105.000000 | 120.000000 | 120.000000 | 100.000000 | 131.000000 |
| 41 | САД_std_max | 111.647786 | 111.647786 | 111.647786 | 104.948133 | 104.948133 | 104.948133 | 116.496457 | 116.496457 | 116.496457 | 131.415643 | 131.415643 | 131.415643 |
| 42 | САД_std_min | 106.018881 | 106.018881 | 106.018881 | 90.912333 | 90.912333 | 90.912333 | 110.707624 | 110.707624 | 110.707624 | 112.684357 | 112.684357 | 112.684357 |
| 43 | СрАД | 76.666667 | 70.250000 | 86.666667 | 70.000000 | 59.166667 | 80.833333 | 78.333333 | 73.333333 | 89.750000 | 88.666667 | 76.416667 | 100.000000 |
| 44 | СрАД_std_max | 80.267333 | 80.267333 | 80.267333 | 75.223156 | 75.223156 | 75.223156 | 84.233887 | 84.233887 | 84.233887 | 94.448069 | 94.448069 | 94.448069 |
| 45 | СрАД_std_min | 75.536900 | 75.536900 | 75.536900 | 63.583045 | 63.583045 | 63.583045 | 79.242303 | 79.242303 | 79.242303 | 82.185264 | 82.185264 | 82.185264 |
| 46 | ЧСС | 104.000000 | 89.250000 | 118.000000 | 110.000000 | 96.000000 | 130.000000 | 95.000000 | 88.250000 | 113.750000 | 101.000000 | 95.750000 | 113.500000 |
| 47 | ЧСС_std_max | 109.245396 | 109.245396 | 109.245396 | 121.750852 | 121.750852 | 121.750852 | 105.363789 | 105.363789 | 105.363789 | 109.682836 | 109.682836 | 109.682836 |
| 48 | ЧСС_std_min | 100.564128 | 100.564128 | 100.564128 | 104.807287 | 104.807287 | 104.807287 | 96.493354 | 96.493354 | 96.493354 | 95.717164 | 95.717164 | 95.717164 |
import warnings
warnings.filterwarnings("ignore")
for i in params:
i_std_min = str(i+'_std_min')
i_std_max = str(i+'_std_max')
for ids in set(df_all.ID):
# tab.loc[tab.ID==ids,i_std_min] = (tab[i].mean() + tab[i].std(ddof=1)*2 / np.sqrt(tab.shape[0])) - tab[tab.ID==ids][i].min()
# tab.loc[tab.ID==ids,i_std_max] = tab[tab.ID==ids][i].max() - (tab[i].mean() - tab[i].std(ddof=1)*2 / np.sqrt(tab.shape[0]))
df_all.loc[df_all.ID==ids,i_std_min] = ((df_all[i].mean() + df_all[i].std(ddof=1)*2 / np.sqrt(df_all.shape[0])) - (df_all[i].mean() - df_all[i].std(ddof=1)*1.96 / np.sqrt(df_all.shape[0]))) - df_all[df_all.ID==ids][i].min()
df_all.loc[df_all.ID==ids,i_std_max] = ((df_all[i].mean() + df_all[i].std(ddof=1)*2 / np.sqrt(df_all.shape[0])) - (df_all[i].mean() - df_all[i].std(ddof=1)*1.96 / np.sqrt(df_all.shape[0]))) - df_all[df_all.ID==ids][i].max()
pd.options.display.max_rows = 350
params2 = df_all.columns[1:].drop(['OUTCOME','GT'])
results5 = []
df1 = df_all.loc[(df_all.ID.isin(patients))&(df_all.OUTCOME=='Survived')&(df.GT==1),params2] # выжили, имели >35% случаев отклонения более 1.96*std
df2 = df_all.loc[(df_all.ID.isin(patients))&(df_all.OUTCOME=='Died')&(df.GT==1),params2] # умерли, имели >35% случаев отклонения более 1.96*std
df3 = df_all.loc[(df_all.ID.isin(patients))&(df_all.OUTCOME=='Survived')&(df.GT==0),params2] # выжили, имели <35% случаев отклонения более 1.96*std
df4 = df_all.loc[(df_all.ID.isin(patients))&(df_all.OUTCOME=='Died')&(df.GT==0),params2] # умерли, имели <35% случаев отклонения более 2*std
for i in params2:
stat, p = stats.kruskal(df1.loc[:,i],df2.loc[:,i],df3.loc[:,i],df4.loc[:,i])
# print('*'*50)
# print(i)
results5.append([i,round(p,4),\
df1.loc[:,i].median(),df1.loc[:,i].quantile(0.25),df1.loc[:,i].quantile(0.75),\
df2.loc[:,i].median(),df2.loc[:,i].quantile(0.25),df2.loc[:,i].quantile(0.75),\
df3.loc[:,i].median(),df3.loc[:,i].quantile(0.25),df3.loc[:,i].quantile(0.75),\
df4.loc[:,i].median(),df4.loc[:,i].quantile(0.25),df4.loc[:,i].quantile(0.75)])
# print('Разница не доказана:',p)
results5_df = pd.DataFrame(results5,columns=['Параметр','p-value','Медиана в группе выживших ГТ+ с отклонениями >35% (1)','25-квантиль в группе выживших с отклонениями >35% (1)','75-квантили в группе выживших с отклонениями >35% (1)',\
'Медиана в группе умерших ГТ+ с отклонениями >35% (2)','25-квантиль в группе умерших с отклонениями >35% (2)','75-квантили в группе умерших с отклонениями >35% (2)',\
'Медиана в группе выживших ГТ- с отклонениями >35% (3)','25-квантиль в группе выживших с отклонениями >35% (3)','75-квантили в группе выживших с отклонениями >35% (3)',\
'Медиана в группе умерших ГТ- с отклонениями >35% (4)','25-квантиль в группе умерших с отклонениями >35% (4)','75-квантили в группе умерших с отклонениями >35% (4)'])
results5_df.groupby('Параметр',as_index=False).mean().sort_values('p-value')
| Параметр | p-value | Медиана в группе выживших ГТ+ с отклонениями >35% (1) | 25-квантиль в группе выживших с отклонениями >35% (1) | 75-квантили в группе выживших с отклонениями >35% (1) | Медиана в группе умерших ГТ+ с отклонениями >35% (2) | 25-квантиль в группе умерших с отклонениями >35% (2) | 75-квантили в группе умерших с отклонениями >35% (2) | Медиана в группе выживших ГТ- с отклонениями >35% (3) | 25-квантиль в группе выживших с отклонениями >35% (3) | 75-квантили в группе выживших с отклонениями >35% (3) | Медиана в группе умерших ГТ- с отклонениями >35% (4) | 25-квантиль в группе умерших с отклонениями >35% (4) | 75-квантили в группе умерших с отклонениями >35% (4) | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 26 | ИА | 0.0000 | 0.949138 | 0.804545 | 1.097727 | 1.097345 | 0.950495 | 1.343561 | 0.884620 | 0.730938 | 1.019565 | 0.834058 | 0.716717 | 0.970000 |
| 17 | Амилаза_std_max | 0.0000 | -61.046514 | -268.046514 | 28.353486 | 35.653486 | 35.653486 | 35.653486 | -40.446514 | -109.546514 | 35.653486 | 35.653486 | 35.653486 | 35.653486 |
| 16 | Амилаза | 0.0000 | 52.700000 | 0.000000 | 146.100000 | 0.000000 | 0.000000 | 0.000000 | 47.850000 | 0.000000 | 122.600000 | 0.000000 | 0.000000 | 0.000000 |
| 15 | АЧТВ_std_min | 0.0000 | -23.364082 | -26.364082 | -2.614082 | -26.364082 | -29.364082 | 2.635918 | -25.164082 | -26.764082 | -21.764082 | 2.635918 | -25.364082 | 2.635918 |
| 30 | Инфузия, % от N_std_max | 0.0000 | -136.728596 | -163.259693 | -117.608536 | -189.798041 | -241.395263 | -153.270263 | -145.987462 | -179.349808 | -125.038723 | -153.270263 | -177.332763 | -136.191445 |
| 44 | СрАД_std_max | 0.0000 | -86.440336 | -94.440336 | -79.857003 | -87.773669 | -91.440336 | -71.107003 | -87.773669 | -97.773669 | -81.773669 | -97.773669 | -97.773669 | -96.940336 |
| 12 | АСТ_std_min | 0.0000 | 3.186716 | -11.413284 | 14.686716 | -51.213284 | -71.413284 | 1.586716 | 9.786716 | -8.413284 | 16.486716 | -57.813284 | -64.413284 | 14.586716 |
| 22 | ДАД_std_min | 0.0000 | -47.811789 | -57.811789 | -42.811789 | -27.811789 | -41.811789 | -17.811789 | -50.311789 | -57.811789 | -46.311789 | -57.811789 | -67.811789 | -49.811789 |
| 10 | АСТ | 0.0000 | 58.100000 | 35.900000 | 171.775000 | 111.000000 | 80.000000 | 163.850000 | 40.800000 | 30.012500 | 86.000000 | 104.000000 | 30.250000 | 110.000000 |
| 9 | АЛТ_std_min | 0.0000 | 0.805402 | -36.694598 | 14.505402 | -11.294598 | -34.494598 | -6.494598 | 12.205402 | -4.532098 | 20.505402 | -11.294598 | -45.494598 | -0.494598 |
| 32 | КИ | 0.0000 | 2.500000 | 0.000000 | 5.000000 | 7.500000 | 2.000000 | 20.000000 | 0.000000 | 0.000000 | 5.000000 | 4.500000 | 0.000000 | 5.000000 |
| 7 | АЛТ | 0.0000 | 56.850000 | 20.250000 | 129.875000 | 66.000000 | 42.800000 | 189.850000 | 27.100000 | 18.000000 | 44.937500 | 44.900000 | 37.625000 | 108.250000 |
| 33 | КИ_std_max | 0.0000 | -1.407536 | -6.307536 | 3.592464 | -4.407536 | -26.407536 | -3.907536 | 3.592464 | -3.907536 | 3.592464 | -3.907536 | -12.407536 | -1.407536 |
| 5 | SpO2_std_max | 0.0000 | -99.358904 | -99.358904 | -98.358904 | -98.358904 | -98.358904 | -98.358904 | -99.358904 | -99.358904 | -98.358904 | -98.358904 | -98.358904 | -98.358904 |
| 45 | СрАД_std_min | 0.0000 | -66.107003 | -72.440336 | -56.773669 | -41.107003 | -58.440336 | -31.107003 | -67.773669 | -73.107003 | -61.023669 | -71.107003 | -79.273669 | -64.440336 |
| 47 | ЧСС_std_max | 0.0000 | -121.116281 | -135.616281 | -106.116281 | -126.116281 | -171.116281 | -126.116281 | -116.116281 | -136.116281 | -106.116281 | -122.116281 | -126.116281 | -120.116281 |
| 42 | САД_std_min | 0.0000 | -96.291651 | -102.291651 | -87.291651 | -67.291651 | -91.291651 | -57.291651 | -97.291651 | -104.541651 | -87.291651 | -97.291651 | -101.791651 | -87.291651 |
| 39 | Площадь тела | 0.0000 | 0.970000 | 0.610000 | 1.195000 | 1.210000 | 0.550000 | 1.330000 | 0.970000 | 0.670000 | 1.150000 | 1.210000 | 1.090000 | 1.330000 |
| 18 | Амилаза_std_min | 0.0000 | 14.253486 | -20.246514 | 35.653486 | 35.653486 | 35.653486 | 35.653486 | 13.353486 | -13.546514 | 35.653486 | 35.653486 | 35.653486 | 35.653486 |
| 40 | САД | 0.0000 | 110.000000 | 100.000000 | 116.000000 | 101.000000 | 82.500000 | 111.500000 | 112.500000 | 105.000000 | 120.000000 | 120.000000 | 100.000000 | 131.000000 |
| 41 | САД_std_max | 0.0001 | -117.291651 | -127.291651 | -112.291651 | -113.291651 | -119.291651 | -97.291651 | -117.291651 | -137.291651 | -112.291651 | -127.291651 | -131.291651 | -117.291651 |
| 11 | АСТ_std_max | 0.0001 | -140.413284 | -438.913284 | -11.313284 | -71.413284 | -608.413284 | -56.413284 | -30.613284 | -142.713284 | -9.313284 | -70.413284 | -118.413284 | -11.413284 |
| 43 | СрАД | 0.0001 | 76.666667 | 70.250000 | 86.666667 | 70.000000 | 59.166667 | 80.833333 | 78.333333 | 73.333333 | 89.750000 | 88.666667 | 76.416667 | 100.000000 |
| 3 | Day | 0.0002 | 3.000000 | 2.000000 | 5.000000 | 3.000000 | 2.000000 | 5.500000 | 5.000000 | 3.000000 | 6.000000 | 5.000000 | 3.750000 | 6.000000 |
| 28 | ИА_std_min | 0.0002 | -0.720469 | -0.777741 | -0.614408 | -0.731323 | -1.024664 | -0.678511 | -0.626313 | -0.786327 | -0.573828 | -0.641038 | -0.731323 | -0.626002 |
| 27 | ИА_std_max | 0.0003 | -1.155288 | -1.399761 | -1.005434 | -1.224337 | -2.447741 | -1.143820 | -1.138217 | -1.276313 | -0.865443 | -0.972132 | -1.325519 | -0.947741 |
| 31 | Инфузия, % от N_std_min | 0.0004 | -72.442500 | -86.093623 | -51.722267 | -85.978596 | -96.903841 | -70.874430 | -79.817249 | -101.508279 | -65.858733 | -92.956473 | -113.322346 | -81.392683 |
| 20 | ДАД | 0.0004 | 60.000000 | 55.000000 | 70.000000 | 55.000000 | 45.000000 | 69.500000 | 65.000000 | 55.250000 | 70.000000 | 70.000000 | 60.000000 | 77.250000 |
| 8 | АЛТ_std_max | 0.0006 | -91.644598 | -246.494598 | 6.505402 | -83.494598 | -406.494598 | -16.494598 | -9.794598 | -68.594598 | 6.305402 | -128.494598 | -133.244598 | -11.294598 |
| 19 | Возраст | 0.0007 | 7.000000 | 3.000000 | 15.000000 | 5.000000 | 1.000000 | 5.500000 | 8.000000 | 3.250000 | 12.000000 | 13.000000 | 5.250000 | 14.000000 |
| 21 | ДАД_std_max | 0.0008 | -72.811789 | -82.811789 | -63.561789 | -74.811789 | -80.811789 | -57.811789 | -74.311789 | -82.811789 | -65.811789 | -84.311789 | -87.811789 | -80.061789 |
| 48 | ЧСС_std_min | 0.0019 | -81.116281 | -90.866281 | -69.116281 | -70.116281 | -84.116281 | -66.116281 | -72.116281 | -88.116281 | -63.116281 | -74.116281 | -92.116281 | -73.116281 |
| 29 | Инфузия, % от N | 0.0022 | 115.000000 | 84.760417 | 139.476629 | 138.823529 | 101.553030 | 175.764706 | 121.428571 | 98.640351 | 141.308027 | 133.746130 | 128.296246 | 149.583333 |
| 6 | SpO2_std_min | 0.0022 | -96.358904 | -97.358904 | -93.358904 | -91.358904 | -97.358904 | -87.358904 | -96.358904 | -97.358904 | -95.358904 | -94.358904 | -97.358904 | -89.358904 |
| 14 | АЧТВ_std_max | 0.0040 | -32.364082 | -37.364082 | -23.364082 | -40.364082 | -77.364082 | 2.635918 | -33.214082 | -37.364082 | -28.289082 | -21.364082 | -40.364082 | 2.635918 |
| 2 | Cl-_std_min | 0.0074 | -101.894178 | -105.894178 | -97.894178 | -106.638934 | -110.894178 | -97.894178 | -100.294178 | -102.894178 | -97.894178 | -102.266556 | -106.638934 | -95.394178 |
| 34 | КИ_std_min | 0.0087 | 3.592464 | -1.407536 | 3.592464 | -0.407536 | -4.407536 | 3.592464 | 3.592464 | 2.192464 | 3.592464 | -0.407536 | -1.407536 | 3.592464 |
| 38 | Масса тела | 0.0090 | 29.000000 | 14.000000 | 60.000000 | 20.000000 | 12.000000 | 25.000000 | 30.000000 | 15.000000 | 50.000000 | 43.000000 | 19.000000 | 50.000000 |
| 1 | Cl-_std_max | 0.0143 | -113.894178 | -120.394178 | -107.894178 | -120.894178 | -148.894178 | -111.894178 | -113.194178 | -122.894178 | -106.894178 | -107.894178 | -114.894178 | -106.644178 |
| 37 | Лактат_std_min | 0.0183 | -0.503136 | -0.903136 | -0.303136 | 0.296864 | -0.803136 | 0.296864 | -0.503136 | -0.603136 | 0.296864 | 0.296864 | -0.803136 | 0.296864 |
| 46 | ЧСС | 0.0531 | 104.000000 | 89.250000 | 118.000000 | 110.000000 | 96.000000 | 130.000000 | 95.000000 | 88.250000 | 113.750000 | 101.000000 | 95.750000 | 113.500000 |
| 4 | SpO2 | 0.0642 | 99.000000 | 97.000000 | 100.000000 | 98.000000 | 97.000000 | 99.000000 | 99.000000 | 97.000000 | 100.000000 | 98.000000 | 98.000000 | 99.000000 |
| 0 | Cl- | 0.0987 | 109.250000 | 104.625000 | 115.000000 | 111.500000 | 107.872378 | 125.500000 | 108.000000 | 104.000000 | 113.000000 | 110.000000 | 107.875000 | 115.875000 |
| 13 | АЧТВ | 0.1368 | 29.200000 | 23.250000 | 33.000000 | 32.000000 | 0.000000 | 38.000000 | 30.000000 | 27.125000 | 34.225000 | 24.000000 | 0.000000 | 43.000000 |
| 24 | Диурез, мл/кг_std_max | 0.1599 | -69.280680 | -116.058458 | -52.075552 | -121.114014 | -160.280680 | -50.280680 | -89.480680 | -126.947347 | -58.149728 | -104.140330 | -134.311688 | -76.614014 |
| 36 | Лактат_std_max | 0.2557 | -1.853136 | -2.703136 | -1.403136 | 0.296864 | -3.803136 | 0.296864 | -2.003136 | -2.778136 | 0.296864 | 0.296864 | -2.603136 | 0.296864 |
| 35 | Лактат | 0.3270 | 1.200000 | 0.725000 | 1.700000 | 0.000000 | 0.000000 | 3.550000 | 1.100000 | 0.000000 | 1.687500 | 0.000000 | 0.000000 | 2.500000 |
| 25 | Диурез, мл/кг_std_min | 0.3958 | -16.947347 | -31.489014 | -6.836236 | -20.014014 | -34.614014 | -6.114014 | -22.114014 | -43.614014 | -8.078300 | -22.561382 | -27.185005 | -13.114014 |
| 23 | Диурез, мл/кг | 0.8019 | 49.388889 | 33.323077 | 74.750000 | 50.000000 | 31.500000 | 83.166667 | 49.166667 | 30.714286 | 87.325000 | 42.500000 | 31.986842 | 68.313953 |
Как видно, при различных принципах формирования выборок для сравнения, убедительных данных о значимом различии выборок между собой по принципу использования ГТ не наблюдается.
Далее мы попытаемся оценить различия между группами пациентов в случаях однократного (в первый день) и многократного (больше одного дня, а также однократного после 1го дня) использования ГТ.
Просмотр первых 5 записей
# 1й день - день поступления пациента
df_1 = df[df['Day']==1].copy()
df_1.head()
| ID | Day | Возраст | GT | САД | ДАД | СрАД | ЧСС | ИА | SpO2 | ... | Лактат | Амилаза | АЛТ | АСТ | АЧТВ | Инфузия, % от N | КИ | Площадь тела | Диурез, мл/кг | OUTCOME | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 0 | 1 | 1 | 6.00 | 0.0 | 100.0 | 65.0 | 76.666667 | 108.0 | 1.080000 | 100.0 | ... | 0.0 | 94.2 | 50.2 | 86.0 | 23.6 | 130.487805 | 0.0 | 0.7300 | 43.500000 | Survived |
| 6 | 2 | 1 | 0.42 | 0.0 | 100.0 | 66.0 | 77.333333 | 115.0 | 1.150000 | 100.0 | ... | 0.0 | 18.3 | 31.3 | 46.0 | 31.5 | 124.255952 | 5.0 | 0.2908 | 23.571429 | Survived |
| 12 | 3 | 1 | 13.00 | 1.0 | 120.0 | 80.0 | 93.333333 | 80.0 | 0.666667 | 100.0 | ... | 0.0 | 38.8 | 40.8 | 90.3 | 26.0 | 73.750000 | 0.0 | 1.1500 | 50.909091 | Survived |
| 31 | 4 | 1 | 8.00 | 0.0 | 110.0 | 65.0 | 80.000000 | 124.0 | 1.127273 | 100.0 | ... | 0.0 | 15.3 | 11.2 | 35.3 | 29.1 | 294.736842 | 5.0 | 0.8500 | 25.666667 | Survived |
| 36 | 5 | 1 | 11.00 | 1.0 | 115.0 | 75.0 | 88.333333 | 110.0 | 0.956522 | 98.0 | ... | 0.0 | 65.6 | 27.4 | 52.5 | 26.9 | 36.666667 | 0.0 | 1.0300 | 29.400000 | Survived |
5 rows × 22 columns
Описательная статистика: группа 1
# Пациенты, которые получали ГТ имеют параметр GT=1
df_1_1 = df_1[df_1['GT']==1].loc[:,target_columns]
df_1_1.describe().T
| count | mean | std | min | 25% | 50% | 75% | max | |
|---|---|---|---|---|---|---|---|---|
| ID | 88.0 | 106.375000 | 64.528228 | 3.000000 | 47.750000 | 99.500000 | 162.250000 | 215.000000 |
| Day | 88.0 | 1.000000 | 0.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 |
| Возраст | 88.0 | 8.797348 | 5.160294 | 0.250000 | 4.000000 | 8.500000 | 13.000000 | 17.000000 |
| GT | 88.0 | 1.000000 | 0.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 |
| САД | 88.0 | 104.795455 | 21.548213 | 45.000000 | 90.000000 | 106.500000 | 118.500000 | 155.000000 |
| ДАД | 88.0 | 60.034091 | 15.818256 | 17.000000 | 50.000000 | 60.500000 | 70.000000 | 100.000000 |
| СрАД | 88.0 | 74.954545 | 16.927098 | 26.333333 | 66.666667 | 77.666667 | 85.666667 | 113.333333 |
| ЧСС | 88.0 | 111.465909 | 24.578726 | 54.000000 | 96.000000 | 112.500000 | 122.000000 | 172.000000 |
| ИА | 88.0 | 1.128057 | 0.422854 | 0.412903 | 0.855820 | 1.078499 | 1.273694 | 2.800000 |
| SpO2 | 88.0 | 97.272727 | 8.681765 | 26.000000 | 98.000000 | 99.000000 | 100.000000 | 100.000000 |
| Масса тела | 88.0 | 36.119318 | 22.140875 | 6.000000 | 18.000000 | 30.000000 | 51.250000 | 100.000000 |
| Cl- | 88.0 | 108.195129 | 11.914103 | 31.000000 | 104.750000 | 108.000000 | 110.250000 | 158.000000 |
| Лактат | 88.0 | 1.955682 | 2.824599 | 0.000000 | 0.000000 | 1.250000 | 2.800000 | 17.000000 |
| Амилаза | 88.0 | 34.459091 | 66.605895 | 0.000000 | 0.000000 | 0.000000 | 43.975000 | 329.200000 |
| АЛТ | 88.0 | 144.100000 | 397.108247 | 0.000000 | 15.650000 | 31.650000 | 95.325000 | 2865.000000 |
| АСТ | 88.0 | 208.950000 | 428.146292 | 0.000000 | 27.875000 | 58.200000 | 162.650000 | 2458.300000 |
| АЧТВ | 88.0 | 16.502273 | 19.595425 | 0.000000 | 0.000000 | 0.000000 | 30.000000 | 90.000000 |
| Инфузия, % от N | 88.0 | 96.841263 | 67.828810 | 0.000000 | 54.614504 | 79.737634 | 116.593750 | 353.009259 |
| КИ | 88.0 | 19.281364 | 106.323936 | 0.000000 | 0.000000 | 0.000000 | 5.000000 | 956.600000 |
| Площадь тела | 88.0 | 0.943977 | 0.310832 | 0.250000 | 0.610000 | 1.030000 | 1.210000 | 1.450000 |
| Диурез, мл/кг | 88.0 | 41.803068 | 32.895691 | 0.000000 | 13.722222 | 33.458333 | 63.072082 | 179.166667 |
Описательная статистика: группа 2
# Пациенты, которые не получали ГТ имеют параметр GT=0
df_1_0 = df_1[df_1['GT']==0].loc[:,target_columns]
df_1_0.describe().T
| count | mean | std | min | 25% | 50% | 75% | max | |
|---|---|---|---|---|---|---|---|---|
| ID | 115.0 | 102.408696 | 59.924499 | 1.000000 | 53.000000 | 102.000000 | 150.000000 | 216.000000 |
| Day | 115.0 | 1.000000 | 0.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 |
| Возраст | 115.0 | 9.192725 | 5.549760 | 0.250000 | 4.000000 | 9.000000 | 14.500000 | 18.000000 |
| GT | 115.0 | 0.000000 | 0.000000 | 0.000000 | 0.000000 | 0.000000 | 0.000000 | 0.000000 |
| САД | 115.0 | 106.460870 | 17.396454 | 70.000000 | 92.500000 | 110.000000 | 120.000000 | 159.000000 |
| ДАД | 115.0 | 63.678261 | 13.223814 | 30.000000 | 55.500000 | 60.000000 | 70.000000 | 119.000000 |
| СрАД | 115.0 | 77.939130 | 13.730104 | 43.333333 | 68.833333 | 77.333333 | 86.333333 | 117.333333 |
| ЧСС | 115.0 | 109.913043 | 22.587671 | 40.000000 | 92.000000 | 110.000000 | 125.000000 | 165.000000 |
| ИА | 115.0 | 1.069361 | 0.327999 | 0.407692 | 0.825121 | 1.000000 | 1.211702 | 2.133333 |
| SpO2 | 115.0 | 98.252174 | 3.942222 | 70.000000 | 98.000000 | 100.000000 | 100.000000 | 100.000000 |
| Масса тела | 115.0 | 35.856522 | 21.586197 | 6.000000 | 16.000000 | 30.000000 | 50.000000 | 103.000000 |
| Cl- | 115.0 | 109.759751 | 9.118439 | 97.000000 | 104.000000 | 108.744756 | 113.000000 | 148.000000 |
| Лактат | 115.0 | 1.716522 | 3.064652 | 0.000000 | 0.000000 | 1.000000 | 2.500000 | 25.000000 |
| Амилаза | 115.0 | 35.780870 | 61.518358 | 0.000000 | 0.000000 | 15.300000 | 50.850000 | 533.500000 |
| АЛТ | 115.0 | 122.497826 | 236.534967 | 0.000000 | 12.600000 | 36.000000 | 97.250000 | 1260.700000 |
| АСТ | 115.0 | 172.971043 | 358.602569 | 0.000000 | 0.000000 | 53.100000 | 140.700000 | 2242.000000 |
| АЧТВ | 115.0 | 17.027826 | 16.857767 | 0.000000 | 0.000000 | 23.500000 | 31.000000 | 58.000000 |
| Инфузия, % от N | 115.0 | 95.429568 | 63.586685 | 0.000000 | 56.039136 | 79.166667 | 122.143500 | 295.701754 |
| КИ | 115.0 | 6.584783 | 32.661305 | 0.000000 | 0.000000 | 0.000000 | 1.250000 | 320.000000 |
| Площадь тела | 115.0 | 0.883384 | 0.334534 | 0.250000 | 0.610000 | 0.850000 | 1.210000 | 1.390000 |
| Диурез, мл/кг | 115.0 | 39.011873 | 34.131423 | 0.000000 | 15.250000 | 30.303030 | 54.916667 | 205.384615 |
# сравнение средних
a = pd.DataFrame(df_1_1[target_columns[2:-1]].mean()).rename(columns = {0:'Группа 1: получает ГТ'})
a_ = []
for i in target_columns[2:-1]:
a_.append(df_1_0[df_1_0[i]>0][i].mean())
a['Группа 2: не получает ГТ'] = a_
a.fillna(0)
| Группа 1: получает ГТ | Группа 2: не получает ГТ | |
|---|---|---|
| Возраст | 8.797348 | 9.192725 |
| GT | 1.000000 | 0.000000 |
| САД | 104.795455 | 106.460870 |
| ДАД | 60.034091 | 63.678261 |
| СрАД | 74.954545 | 77.939130 |
| ЧСС | 111.465909 | 109.913043 |
| ИА | 1.128057 | 1.069361 |
| SpO2 | 97.272727 | 98.252174 |
| Масса тела | 36.119318 | 35.856522 |
| Cl- | 108.195129 | 109.759751 |
| Лактат | 1.955682 | 2.902941 |
| Амилаза | 34.459091 | 66.367742 |
| АЛТ | 144.100000 | 156.525000 |
| АСТ | 208.950000 | 234.019647 |
| АЧТВ | 16.502273 | 32.101639 |
| Инфузия, % от N | 96.841263 | 100.682572 |
| КИ | 19.281364 | 26.112069 |
| Площадь тела | 0.943977 | 0.883384 |
| Диурез, мл/кг | 41.803068 | 41.928649 |
При простом сравнении средних значений видны не самые сильные различия, которые можно было бы ожидать: в группе, получавшей ГТ чуть меньше АД, чуть выше ЧСС и индекс Альговера, ниже уровень ионов хлора, АЛТ, АСТ, АЧТВ, объем назначенной инфузии и катехоламинов.
Видно, что среднее знаений параметров в двух группах очень близки друг к другу; однако наличие или отсутствие разницы между группами нужно доказать
# Размер выборки
print(f'Количество пациентов в группах:\nПервая группа\t{df_1_1.ID.nunique()}\nВторая группа\t{df_1_0.ID.nunique()}')
Количество пациентов в группах: Первая группа 88 Вторая группа 115
sns.barplot(data = [[0],[df_1_1.ID.nunique()],[df_1_0.ID.nunique()]])
plt.xlim(0.5)
plt.title('Размер групп');
Гистограммы построены для того, чтобы визуально оценить нормальность распределения признаков: видно, что только в случае среднего артериального давления в группе без ГТ можно наблюдать близкое к нормальному распределение. Поэтому дальше мы будем использовать непараметрический тест Краскела-Уоллиса для независимых выборок разного размера.
На этих гистограммах также более удобно оценить медиану (изучается в тесте Краскела-Уоллиса) каждого параметра.
figure,ax = plt.subplots(len(target_columns[4:-1]),2,figsize=(14,60))
sns.set(style='whitegrid', rc={"grid.linewidth": 0.1})
sns.set_context("paper", font_scale=1.8)
for k,i in enumerate(target_columns[4:-1]):
sns.histplot(df_1[df_1['GT']==0][i],bins=10,ax=ax[k,0])
sns.histplot(df_1[df_1['GT']==1][i],bins=10,ax=ax[k,1])
ax[k,0].set_title(i+' (без гормонотерапии)')
ax[k,1].set_title(i+' (с гормонотерапией)')
ax[k,0].set(ylabel='Количество')
ax[k,1].set(ylabel='Количество')
plt.tight_layout()
columns = ['Вариант','Показатель','Значимость различий','p_value','alpha']
append_list = []
for k,i in enumerate(target_columns[4:-1]):
group0 = df_1[df_1['GT']==0][i]
group1 = df_1[df_1['GT']==1][i]
alpha = 0.05
test_value, p = stats.kruskal(group0,group1)
if alpha<p:
append_list.append(['Этап 1',i,'значимость различия не доказана',p,alpha,df_1[df_1['GT']==0][i].median(),df_1[df_1['GT']==0][i].quantile(0.25),df_1[df_1['GT']==0][i].quantile(0.75),\
df_1[df_1['GT']==1][i].median(),df_1[df_1['GT']==1][i].quantile(0.25),df_1[df_1['GT']==1][i].quantile(0.75)])
else:
append_list.append(['Этап 1',i,'обнаружены значимые различия',p,alpha,df_1[df_1['GT']==0][i].median(),df_1[df_1['GT']==0][i].quantile(0.25),df_1[df_1['GT']==0][i].quantile(0.75),\
df_1[df_1['GT']==1][i].median(),df_1[df_1['GT']==1][i].quantile(0.25),df_1[df_1['GT']==1][i].quantile(0.75)])
# Для текстового вывода результатов - раскомментируйте данные строки;
# if alpha<p:
# print(f'Разница по параметру {i} между двумя группами не доказана.')
# print(f'\tСтатистика теста = {test_value}, p-значение = {p}')
# else:
# print(f'По параметру {i} наблюдается статистически достоверная разница между двумя группами.')
# print(f'\tСтатистика теста = {test_value}, p-значение = {p}')
# Составление списков пациентов получавших ГТ более 1 дня и только один (первый) день
# выбираем из датасета df Day>1, GT = 1 и только тех пациентов, которые находятся в списке df_1_gt_1 (получали ГТ в первый день)
df_1_gt_1 = df.loc[(df.GT==1) & (df.Day==1),'ID'].unique()
a = df.loc[(df['Day']>1)&(df['ID'].isin(df_1_gt_1)),:].groupby('ID', as_index=False).max()
df_gt_more1day = df.loc[df.ID.isin(a.loc[a.GT==1,'ID']),:]
print(f'{df_gt_more1day["ID"].nunique()} получали ГТ более 1 дня.')
# есть данные и за 1 и за остальные дни; но в первый день они получали ГТ, а в др.дни - не получали
df_gt_only1day = df.loc[df.ID.isin(a.loc[a.GT==0,'ID']),:]
print(f'{df_gt_only1day["ID"].nunique()} получали ГТ только в 1й день')
67 получали ГТ более 1 дня. 12 получали ГТ только в 1й день
# не было ни одного пациента, который бы получал ГТ и находился в ОРИТ только 1 день
df.loc[(df['Day'].max()==1)&(df['ID'].isin(df_1_gt_1)),:].groupby('ID', as_index=False).max().shape[0]
0
# Размер выборки
print(f'Количество пациентов в группах:\nПервая группа\t{df_gt_only1day.ID.nunique()}\nВторая группа\t{df_gt_more1day.ID.nunique()}')
Количество пациентов в группах: Первая группа 12 Вторая группа 67
sns.barplot(data = [[0],[df_gt_only1day["ID"].nunique()],[df_gt_more1day["ID"].nunique()]])
plt.xlim(0.5)
plt.title('Размер групп');
Описательная статистика: 1 группа
# Описательная статистика пациентов, которые получали ГТ только в 1й день
df_gt_only1day[target_columns[2:]].describe().T
| count | mean | std | min | 25% | 50% | 75% | max | |
|---|---|---|---|---|---|---|---|---|
| Возраст | 62.0 | 7.338710 | 3.922167 | 3.000000 | 4.000000 | 6.125000 | 11.750000 | 15.000000 |
| GT | 62.0 | 0.193548 | 0.398304 | 0.000000 | 0.000000 | 0.000000 | 0.000000 | 1.000000 |
| САД | 62.0 | 110.774194 | 13.216258 | 80.000000 | 102.750000 | 113.500000 | 118.750000 | 150.000000 |
| ДАД | 62.0 | 63.887097 | 12.420376 | 35.000000 | 55.000000 | 63.000000 | 70.000000 | 100.000000 |
| СрАД | 62.0 | 79.516129 | 11.562561 | 50.000000 | 73.083333 | 77.500000 | 85.750000 | 116.666667 |
| ЧСС | 62.0 | 101.145161 | 19.627554 | 60.000000 | 89.000000 | 98.500000 | 118.250000 | 165.000000 |
| ИА | 62.0 | 0.933377 | 0.257408 | 0.500000 | 0.780200 | 0.865385 | 1.065152 | 2.062500 |
| SpO2 | 62.0 | 98.774194 | 2.321809 | 90.000000 | 98.000000 | 99.000000 | 100.000000 | 110.000000 |
| Масса тела | 62.0 | 32.741935 | 22.338627 | 12.000000 | 15.000000 | 21.500000 | 57.500000 | 70.000000 |
| Cl- | 62.0 | 107.988371 | 6.955691 | 99.400000 | 102.300000 | 108.000000 | 110.750000 | 129.000000 |
| Лактат | 62.0 | 0.732258 | 1.322538 | 0.000000 | 0.000000 | 0.000000 | 1.300000 | 7.400000 |
| Амилаза | 62.0 | 43.848387 | 48.114034 | 0.000000 | 0.000000 | 33.000000 | 64.475000 | 186.000000 |
| АЛТ | 62.0 | 59.146774 | 69.878751 | 5.700000 | 18.975000 | 27.200000 | 74.900000 | 370.300000 |
| АСТ | 62.0 | 81.050000 | 87.296940 | 16.800000 | 38.000000 | 52.500000 | 98.300000 | 604.200000 |
| АЧТВ | 62.0 | 27.727419 | 12.050977 | 0.000000 | 26.962500 | 29.200000 | 33.675000 | 45.100000 |
| Инфузия, % от N | 62.0 | 106.657416 | 41.176714 | 16.607595 | 82.251450 | 107.430341 | 131.557349 | 205.625000 |
| КИ | 62.0 | 2.338710 | 6.121565 | 0.000000 | 0.000000 | 0.000000 | 4.375000 | 40.000000 |
| Площадь тела | 62.0 | 1.062903 | 0.245993 | 0.550000 | 0.910000 | 1.090000 | 1.255000 | 1.390000 |
| Диурез, мл/кг | 62.0 | 58.592842 | 37.278234 | 5.000000 | 29.060526 | 51.416667 | 83.333333 | 179.166667 |
Описательная статистика: 2 группа
# Описательная статистика пациентов, которые получали ГТ в 1й и любой (любые) последующие дни
df_gt_more1day[target_columns[2:]].describe().T
| count | mean | std | min | 25% | 50% | 75% | max | |
|---|---|---|---|---|---|---|---|---|
| Возраст | 548.0 | 10.438564 | 5.361711 | 0.250000 | 5.000000 | 12.000000 | 16.000000 | 17.000000 |
| GT | 548.0 | 0.653285 | 0.476359 | 0.000000 | 0.000000 | 1.000000 | 1.000000 | 1.000000 |
| САД | 548.0 | 112.124088 | 17.412910 | 45.000000 | 104.000000 | 112.500000 | 120.000000 | 165.000000 |
| ДАД | 548.0 | 65.399635 | 13.792632 | 5.000000 | 60.000000 | 65.000000 | 75.000000 | 100.000000 |
| СрАД | 548.0 | 80.974453 | 14.174995 | 26.333333 | 73.333333 | 81.666667 | 90.083333 | 120.666667 |
| ЧСС | 548.0 | 105.155109 | 23.767145 | 41.000000 | 88.750000 | 105.000000 | 120.000000 | 186.000000 |
| ИА | 548.0 | 0.966663 | 0.312359 | 0.412903 | 0.775182 | 0.909091 | 1.090909 | 3.100000 |
| SpO2 | 548.0 | 98.155109 | 4.290591 | 26.000000 | 98.000000 | 99.000000 | 100.000000 | 100.000000 |
| Масса тела | 548.0 | 42.937956 | 22.495475 | 6.000000 | 20.000000 | 45.000000 | 60.000000 | 100.000000 |
| Cl- | 548.0 | 110.713831 | 12.268808 | 31.000000 | 104.000000 | 108.744756 | 114.000000 | 193.000000 |
| Лактат | 548.0 | 1.680292 | 2.082401 | 0.000000 | 0.000000 | 1.300000 | 2.100000 | 20.000000 |
| Амилаза | 548.0 | 129.325255 | 212.679433 | 0.000000 | 0.000000 | 49.300000 | 172.025000 | 1940.000000 |
| АЛТ | 548.0 | 88.304927 | 193.484734 | 0.000000 | 23.437500 | 42.800000 | 78.750000 | 2865.000000 |
| АСТ | 548.0 | 121.884215 | 234.818416 | 0.000000 | 34.975000 | 55.500000 | 116.000000 | 2458.300000 |
| АЧТВ | 548.0 | 23.420712 | 17.319862 | 0.000000 | 0.000000 | 27.800000 | 34.050000 | 120.000000 |
| Инфузия, % от N | 548.0 | 120.204809 | 51.909820 | 0.000000 | 89.583333 | 112.729691 | 138.134470 | 552.083333 |
| КИ | 548.0 | 9.804051 | 25.599881 | 0.000000 | 0.000000 | 4.500000 | 7.500000 | 246.000000 |
| Площадь тела | 548.0 | 1.013130 | 0.314869 | 0.250000 | 0.790000 | 1.090000 | 1.270000 | 1.450000 |
| Диурез, мл/кг | 548.0 | 47.774219 | 28.806952 | 1.571429 | 28.000000 | 42.500000 | 58.150106 | 179.500000 |
# сравнение средних
a = pd.DataFrame(df_gt_more1day[target_columns[2:-1]].mean()).rename(columns = {0:'ГТ\: 1 и последующие дни'})
a_ = []
for i in target_columns[2:-1]:
a_.append(df_gt_only1day[df_gt_only1day[i]>0][i].mean())
a['ГТ: только 1й день'] = a_
a
| ГТ\: 1 и последующие дни | ГТ: только 1й день | |
|---|---|---|
| Возраст | 10.438564 | 7.338710 |
| GT | 0.653285 | 1.000000 |
| САД | 112.124088 | 110.774194 |
| ДАД | 65.399635 | 63.887097 |
| СрАД | 80.974453 | 79.516129 |
| ЧСС | 105.155109 | 101.145161 |
| ИА | 0.966663 | 0.933377 |
| SpO2 | 98.155109 | 98.774194 |
| Масса тела | 42.937956 | 32.741935 |
| Cl- | 110.713831 | 107.988371 |
| Лактат | 1.680292 | 2.063636 |
| Амилаза | 129.325255 | 66.307317 |
| АЛТ | 88.304927 | 59.146774 |
| АСТ | 121.884215 | 81.050000 |
| АЧТВ | 23.420712 | 31.835185 |
| Инфузия, % от N | 120.204809 | 106.657416 |
| КИ | 9.804051 | 7.631579 |
| Площадь тела | 1.013130 | 1.062903 |
| Диурез, мл/кг | 47.774219 | 58.592842 |
В данном случае мы добавили график QQ-плот (квантиль-квантиль), т.к. в некоторых случаях при просмотре гистограмм неочевидно, что параметры имеют непараметрическое распределение.
# for k,i in enumerate(target_columns[3:]):
# print('Параметр =',i,'\nСреднее = ',df_gt_more1day[i].mean(),'std =',df_gt_more1day[i].std(ddof=1))
figure,ax = plt.subplots(len(target_columns[3:]),4,figsize=(19,70))
for k,i in enumerate(target_columns[3:]):
try:
sns.histplot(df_gt_more1day[i],bins=10,ax=ax[k,0])
interval = np.linspace(0,1,int(df_gt_more1day[i].count()))
x = stats.norm.ppf(np.linspace(0,1,int(df_gt_more1day[i].count())),loc=df_gt_more1day[i].mean(),scale=df_gt_more1day[i].std(ddof=1))
y = np.quantile(df_gt_more1day[i],interval)
sns.lineplot(x = x,y = x,ax=ax[k,1],color='r')
sns.lineplot(x = x,y = y,ax=ax[k,1],color='b')
sns.scatterplot(x = np.linspace(0,int(df_gt_more1day[i].max()),int(df_gt_more1day[i].count())),y = df_gt_more1day[i],ax=ax[k,1],color='grey')
sns.histplot(df_gt_only1day[i],bins=10,ax=ax[k,2])
interval = np.linspace(0,1,int(df_gt_only1day[i].count()))
x = stats.norm.ppf(np.linspace(0,1,int(df_gt_only1day[i].count())),loc=df_gt_only1day[i].mean(),scale=df_gt_only1day[i].std(ddof=1))
y = np.quantile(df_gt_only1day[i],interval)
sns.lineplot(x = x,y = x,ax=ax[k,3],color='r')
sns.lineplot(x = x,y = y,ax=ax[k,3],color='b')
sns.scatterplot(x = np.linspace(0,int(df_gt_only1day[i].max()),int(df_gt_only1day[i].count())),y = df_gt_only1day[i],ax=ax[k,3],color='grey')
ax[k,0].set_title(i+' (ГТ более 1 дня)')
ax[k,1].set_title(i+' (ГТ более 1 дня: QQ-plot)')
ax[k,2].set_title(i+' (ГТ только 1 день)')
ax[k,3].set_title(i+' (ГТ только 1 день: QQ-plot)')
plt.tight_layout()
except Exception:
ax[k,0].set_title(i+' (ГТ более 1 дня)')
ax[k,1].set_title(i+' (ГТ более 1 дня: QQ-plot)')
ax[k,2].set_title(i+' (ГТ только 1 день)')
ax[k,3].set_title(i+' (ГТ только 1 день: QQ-plot)')
plt.tight_layout()
pass
for k,i in enumerate(target_columns[3:-1]):
group0 = df_gt_more1day[i]
group1 = df_gt_only1day[i]
alpha = 0.05
test_value, p = stats.kruskal(group0,group1)
if alpha<p:
append_list.append(['Этап 2',i,'значимость различия не доказана',p,alpha,group0.median(),group0.quantile(0.25),group0.quantile(0.75),\
group1.median(),group1.quantile(0.25),group1.quantile(0.75)])
else:
append_list.append(['Этап 2',i,'обнаружены значимые различия',p,alpha,group0.median(),group0.quantile(0.25),group0.quantile(0.75),\
group1.median(),group1.quantile(0.25),group1.quantile(0.75)])
# if alpha<p:
# print(f'Разница по параметру {i} между двумя группами не доказана.')
# print(f'\tСтатистика теста = {test_value}, p-значение = {p}')
# else:
# print(f'По параметру {i} наблюдается статистически достоверная разница между двумя группами.')
# print(f'\tСтатистика теста = {test_value}, p-значение = {p}')
Между двумя группами (см. результаты в сводной таблице ниже) обнаружены статистически значимые различия по большинству параметров:
Обращает на себя внимание то, что в группе с ГТ 1 день снижены КИ и волемическая нагрузка.
# df_gt_only1day - пациенты получают ГТ только в 1й день
df_not1_users = df.loc[(~df['ID'].isin(df_1_gt_1))&(df.GT==1),'ID']
df_not1 = df.loc[df.ID.isin(df_not1_users),:]
print(f' Размер первой группы = {df_gt_only1day.ID.nunique()}')
Размер первой группы = 12
print(f' Размер второй группы = {df_not1.ID.nunique()}')
Размер второй группы = 25
df_gt_only1day[target_columns[2:]].drop('GT',axis=1).describe().T
| count | mean | std | min | 25% | 50% | 75% | max | |
|---|---|---|---|---|---|---|---|---|
| Возраст | 62.0 | 7.338710 | 3.922167 | 3.000000 | 4.000000 | 6.125000 | 11.750000 | 15.000000 |
| САД | 62.0 | 110.774194 | 13.216258 | 80.000000 | 102.750000 | 113.500000 | 118.750000 | 150.000000 |
| ДАД | 62.0 | 63.887097 | 12.420376 | 35.000000 | 55.000000 | 63.000000 | 70.000000 | 100.000000 |
| СрАД | 62.0 | 79.516129 | 11.562561 | 50.000000 | 73.083333 | 77.500000 | 85.750000 | 116.666667 |
| ЧСС | 62.0 | 101.145161 | 19.627554 | 60.000000 | 89.000000 | 98.500000 | 118.250000 | 165.000000 |
| ИА | 62.0 | 0.933377 | 0.257408 | 0.500000 | 0.780200 | 0.865385 | 1.065152 | 2.062500 |
| SpO2 | 62.0 | 98.774194 | 2.321809 | 90.000000 | 98.000000 | 99.000000 | 100.000000 | 110.000000 |
| Масса тела | 62.0 | 32.741935 | 22.338627 | 12.000000 | 15.000000 | 21.500000 | 57.500000 | 70.000000 |
| Cl- | 62.0 | 107.988371 | 6.955691 | 99.400000 | 102.300000 | 108.000000 | 110.750000 | 129.000000 |
| Лактат | 62.0 | 0.732258 | 1.322538 | 0.000000 | 0.000000 | 0.000000 | 1.300000 | 7.400000 |
| Амилаза | 62.0 | 43.848387 | 48.114034 | 0.000000 | 0.000000 | 33.000000 | 64.475000 | 186.000000 |
| АЛТ | 62.0 | 59.146774 | 69.878751 | 5.700000 | 18.975000 | 27.200000 | 74.900000 | 370.300000 |
| АСТ | 62.0 | 81.050000 | 87.296940 | 16.800000 | 38.000000 | 52.500000 | 98.300000 | 604.200000 |
| АЧТВ | 62.0 | 27.727419 | 12.050977 | 0.000000 | 26.962500 | 29.200000 | 33.675000 | 45.100000 |
| Инфузия, % от N | 62.0 | 106.657416 | 41.176714 | 16.607595 | 82.251450 | 107.430341 | 131.557349 | 205.625000 |
| КИ | 62.0 | 2.338710 | 6.121565 | 0.000000 | 0.000000 | 0.000000 | 4.375000 | 40.000000 |
| Площадь тела | 62.0 | 1.062903 | 0.245993 | 0.550000 | 0.910000 | 1.090000 | 1.255000 | 1.390000 |
| Диурез, мл/кг | 62.0 | 58.592842 | 37.278234 | 5.000000 | 29.060526 | 51.416667 | 83.333333 | 179.166667 |
df_not1[target_columns[2:]].drop('GT',axis=1).describe().T
| count | mean | std | min | 25% | 50% | 75% | max | |
|---|---|---|---|---|---|---|---|---|
| Возраст | 331.0 | 10.277002 | 5.753904 | 0.750000 | 5.000000 | 14.000000 | 15.000000 | 17.000000 |
| САД | 331.0 | 110.873112 | 13.746919 | 70.000000 | 100.000000 | 110.000000 | 120.000000 | 170.000000 |
| ДАД | 331.0 | 64.891239 | 11.953963 | 30.000000 | 55.500000 | 65.000000 | 75.000000 | 110.000000 |
| СрАД | 331.0 | 80.218530 | 11.624494 | 46.666667 | 71.833333 | 80.000000 | 90.000000 | 116.666667 |
| ЧСС | 331.0 | 107.743202 | 23.686409 | 24.000000 | 90.000000 | 109.000000 | 120.500000 | 180.000000 |
| ИА | 331.0 | 0.989235 | 0.267801 | 0.200000 | 0.810795 | 0.970874 | 1.109244 | 2.056338 |
| SpO2 | 331.0 | 98.564955 | 1.922241 | 82.000000 | 98.000000 | 99.000000 | 100.000000 | 100.000000 |
| Масса тела | 331.0 | 39.172205 | 21.802536 | 7.500000 | 15.000000 | 50.000000 | 50.000000 | 80.000000 |
| Cl- | 331.0 | 114.955073 | 12.467300 | 60.600000 | 106.000000 | 111.000000 | 121.000000 | 169.000000 |
| Лактат | 331.0 | 1.493656 | 1.587438 | -1.100000 | 1.000000 | 1.300000 | 1.900000 | 25.000000 |
| Амилаза | 331.0 | 101.735257 | 98.828671 | 0.000000 | 50.075000 | 72.000000 | 129.700000 | 551.600000 |
| АЛТ | 331.0 | 63.625196 | 95.087580 | 0.000000 | 24.250000 | 38.880000 | 62.025000 | 1260.700000 |
| АСТ | 331.0 | 77.497281 | 145.253672 | 0.000000 | 28.400000 | 47.000000 | 74.700000 | 2130.600000 |
| АЧТВ | 331.0 | 31.275831 | 17.886899 | 0.000000 | 28.775000 | 32.000000 | 34.800000 | 162.000000 |
| Инфузия, % от N | 331.0 | 140.936967 | 58.596349 | 14.166667 | 109.687500 | 129.787234 | 160.270833 | 647.916667 |
| КИ | 331.0 | 5.961178 | 7.383817 | 0.000000 | 1.250000 | 5.000000 | 7.500000 | 90.000000 |
| Площадь тела | 331.0 | 0.829743 | 0.330500 | 0.250000 | 0.610000 | 0.670000 | 1.210000 | 1.390000 |
| Диурез, мл/кг | 331.0 | 66.512032 | 42.196608 | 2.000000 | 37.500000 | 53.300000 | 88.794444 | 280.000000 |
# сравнение средних
a = pd.DataFrame(df_gt_only1day[target_columns[2:-1]].drop('GT',axis=1).mean()).rename(columns = {0:'Группа 1: получает ГТ'})
a_ = []
for i in target_columns[2:-1]:
if i != 'GT':
a_.append(df_not1[df_not1[i]>0][i].mean())
a['Группа 2: не получает ГТ'] = a_
a
| Группа 1: получает ГТ | Группа 2: не получает ГТ | |
|---|---|---|
| Возраст | 7.338710 | 10.277002 |
| САД | 110.774194 | 110.873112 |
| ДАД | 63.887097 | 64.891239 |
| СрАД | 79.516129 | 80.218530 |
| ЧСС | 101.145161 | 107.743202 |
| ИА | 0.933377 | 0.989235 |
| SpO2 | 98.774194 | 98.564955 |
| Масса тела | 32.741935 | 39.172205 |
| Cl- | 107.988371 | 114.955073 |
| Лактат | 0.732258 | 1.702749 |
| Амилаза | 43.848387 | 114.538673 |
| АЛТ | 59.146774 | 64.799815 |
| АСТ | 81.050000 | 81.692994 |
| АЧТВ | 27.727419 | 34.623077 |
| Инфузия, % от N | 106.657416 | 140.936967 |
| КИ | 2.338710 | 7.956250 |
| Площадь тела | 1.062903 | 0.829743 |
| Диурез, мл/кг | 58.592842 | 66.512032 |
sns.barplot(data = [[0],[df_gt_only1day.ID.nunique()],[df_not1.ID.nunique()]])
plt.xlim(0.5)
plt.title('Размер групп');
# for k,i in enumerate(target_columns[3:]):
# print('Параметр =',i,'\nСреднее = ',df_gt_more1day[i].mean(),'std =',df_gt_more1day[i].std(ddof=1))
figure,ax = plt.subplots(len(target_columns[3:-1]),4,figsize=(19,70))
for k,i in enumerate(target_columns[3:-1]):
try:
sns.histplot(df_gt_only1day[i],bins=10,ax=ax[k,0])
interval = np.linspace(0,1,int(df_gt_only1day[i].count()))
x = stats.norm.ppf(np.linspace(0,1,int(df_gt_only1day[i].count())),loc=df_gt_only1day[i].mean(),scale=df_gt_only1day[i].std(ddof=1))
y = np.quantile(df_gt_only1day[i],interval)
sns.lineplot(x = x,y = x,ax=ax[k,1],color='r')
sns.lineplot(x = x,y = y,ax=ax[k,1],color='b')
sns.scatterplot(x = np.linspace(0,int(df_gt_only1day[i].max()),int(df_gt_only1day[i].count())),y = df_gt_only1day[i],ax=ax[k,1],color='grey')
sns.histplot(df_not1[i],bins=10,ax=ax[k,2])
interval = np.linspace(0,1,int(df_not1[i].count()))
x = stats.norm.ppf(np.linspace(0,1,int(df_not1[i].count())),loc=df_not1[i].mean(),scale=df_not1[i].std(ddof=1))
y = np.quantile(df_not1[i],interval)
sns.lineplot(x = x,y = x,ax=ax[k,3],color='r')
sns.lineplot(x = x,y = y,ax=ax[k,3],color='b')
sns.scatterplot(x = np.linspace(0,int(df_not1[i].max()),int(df_not1[i].count())),y = df_not1[i],ax=ax[k,3],color='grey')
ax[k,0].set_title(i+' (получали ГТ)')
ax[k,1].set_title(i+' (получали ГТ: QQ-plot)')
ax[k,2].set_title(i+' (не получали ГТ)')
ax[k,3].set_title(i+' (не получали ГТ: QQ-plot)')
plt.tight_layout()
except Exception:
ax[k,0].set_title(i+' (получали ГТ)')
ax[k,1].set_title(i+' (получали ГТ: QQ-plot)')
ax[k,2].set_title(i+' (не получали ГТ)')
ax[k,3].set_title(i+' (не получали ГТ: QQ-plot)')
plt.tight_layout()
pass
for k,i in enumerate(target_columns[3:-1]):
group0 = df_gt_only1day[i]
group1 = df_not1[i]
alpha = 0.05
test_value, p = stats.kruskal(group0,group1)
if alpha<p:
append_list.append(['Этап 3',i,'значимость различия не доказана',p,alpha,group0.median(),group0.quantile(0.25),group0.quantile(0.75),\
group1.median(),group1.quantile(0.25),group1.quantile(0.75)])
else:
append_list.append(['Этап 3',i,'обнаружены значимые различия',p,alpha,group0.median(),group0.quantile(0.25),group0.quantile(0.75),\
group1.median(),group1.quantile(0.25),group1.quantile(0.75)])
# if alpha<p:
# print(f'Разница по параметру {i} между двумя группами не доказана.')
# print(f'\tСтатистика теста = {test_value}, p-значение = {p}')
# else:
# print(f'По параметру {i} наблюдается статистически достоверная разница между двумя группами.')
# print(f'\tСтатистика теста = {test_value}, p-значение = {p}')
результаты представлены в сводной таблице (см. ниже)
# df_gt_only1day - пациенты получают ГТ только в 1й день
df_only1 = df.loc[df.ID.isin(df_gt_only1day.ID.unique()),:]
# поле GT будет содержать 1, если пациент получал ГТ в какой-нибудь день
a = df.groupby('ID',as_index=False)['GT'].max()
users = a.loc[a['GT']==1,'ID'].values
df_noGT = df.loc[~df.ID.isin(users),:]
df_only1[target_columns[2:]].drop('GT',axis=1).describe().T
| count | mean | std | min | 25% | 50% | 75% | max | |
|---|---|---|---|---|---|---|---|---|
| Возраст | 62.0 | 7.338710 | 3.922167 | 3.000000 | 4.000000 | 6.125000 | 11.750000 | 15.000000 |
| САД | 62.0 | 110.774194 | 13.216258 | 80.000000 | 102.750000 | 113.500000 | 118.750000 | 150.000000 |
| ДАД | 62.0 | 63.887097 | 12.420376 | 35.000000 | 55.000000 | 63.000000 | 70.000000 | 100.000000 |
| СрАД | 62.0 | 79.516129 | 11.562561 | 50.000000 | 73.083333 | 77.500000 | 85.750000 | 116.666667 |
| ЧСС | 62.0 | 101.145161 | 19.627554 | 60.000000 | 89.000000 | 98.500000 | 118.250000 | 165.000000 |
| ИА | 62.0 | 0.933377 | 0.257408 | 0.500000 | 0.780200 | 0.865385 | 1.065152 | 2.062500 |
| SpO2 | 62.0 | 98.774194 | 2.321809 | 90.000000 | 98.000000 | 99.000000 | 100.000000 | 110.000000 |
| Масса тела | 62.0 | 32.741935 | 22.338627 | 12.000000 | 15.000000 | 21.500000 | 57.500000 | 70.000000 |
| Cl- | 62.0 | 107.988371 | 6.955691 | 99.400000 | 102.300000 | 108.000000 | 110.750000 | 129.000000 |
| Лактат | 62.0 | 0.732258 | 1.322538 | 0.000000 | 0.000000 | 0.000000 | 1.300000 | 7.400000 |
| Амилаза | 62.0 | 43.848387 | 48.114034 | 0.000000 | 0.000000 | 33.000000 | 64.475000 | 186.000000 |
| АЛТ | 62.0 | 59.146774 | 69.878751 | 5.700000 | 18.975000 | 27.200000 | 74.900000 | 370.300000 |
| АСТ | 62.0 | 81.050000 | 87.296940 | 16.800000 | 38.000000 | 52.500000 | 98.300000 | 604.200000 |
| АЧТВ | 62.0 | 27.727419 | 12.050977 | 0.000000 | 26.962500 | 29.200000 | 33.675000 | 45.100000 |
| Инфузия, % от N | 62.0 | 106.657416 | 41.176714 | 16.607595 | 82.251450 | 107.430341 | 131.557349 | 205.625000 |
| КИ | 62.0 | 2.338710 | 6.121565 | 0.000000 | 0.000000 | 0.000000 | 4.375000 | 40.000000 |
| Площадь тела | 62.0 | 1.062903 | 0.245993 | 0.550000 | 0.910000 | 1.090000 | 1.255000 | 1.390000 |
| Диурез, мл/кг | 62.0 | 58.592842 | 37.278234 | 5.000000 | 29.060526 | 51.416667 | 83.333333 | 179.166667 |
df_noGT[target_columns[2:]].drop('GT',axis=1).describe().T
| count | mean | std | min | 25% | 50% | 75% | max | |
|---|---|---|---|---|---|---|---|---|
| Возраст | 442.0 | 9.533793 | 5.402981 | 0.250000 | 4.000000 | 11.000000 | 15.000000 | 18.000000 |
| САД | 442.0 | 110.757919 | 15.134701 | 50.000000 | 100.000000 | 110.000000 | 120.000000 | 170.000000 |
| ДАД | 442.0 | 64.291855 | 11.203473 | 26.000000 | 60.000000 | 64.500000 | 70.000000 | 119.000000 |
| СрАД | 442.0 | 79.780543 | 11.529464 | 34.000000 | 73.333333 | 80.000000 | 86.666667 | 117.333333 |
| ЧСС | 442.0 | 105.434389 | 23.485828 | 40.000000 | 90.000000 | 107.000000 | 120.000000 | 180.000000 |
| ИА | 442.0 | 0.977722 | 0.290774 | 0.381356 | 0.772942 | 0.989181 | 1.127008 | 2.250000 |
| SpO2 | 442.0 | 98.490950 | 2.585703 | 70.000000 | 98.000000 | 99.000000 | 100.000000 | 100.000000 |
| Масса тела | 442.0 | 40.165158 | 23.323659 | 6.000000 | 16.500000 | 40.000000 | 60.000000 | 103.000000 |
| Cl- | 442.0 | 111.731211 | 14.160864 | 85.000000 | 104.000000 | 108.744756 | 113.925000 | 191.000000 |
| Лактат | 442.0 | 1.301787 | 1.358736 | 0.000000 | 0.000000 | 1.100000 | 1.700000 | 17.000000 |
| Амилаза | 442.0 | 69.267873 | 149.430565 | 0.000000 | 0.000000 | 39.000000 | 78.975000 | 2520.000000 |
| АЛТ | 442.0 | 92.528959 | 172.734534 | 0.000000 | 18.700000 | 35.000000 | 92.750000 | 1384.000000 |
| АСТ | 442.0 | 112.097217 | 229.037349 | 0.000000 | 28.900000 | 52.000000 | 103.175000 | 2242.000000 |
| АЧТВ | 442.0 | 24.614706 | 17.835235 | 0.000000 | 0.000000 | 30.000000 | 37.000000 | 67.000000 |
| Инфузия, % от N | 442.0 | 118.928207 | 49.901537 | 0.000000 | 93.170732 | 112.254684 | 143.658425 | 295.701754 |
| КИ | 442.0 | 6.478394 | 21.513932 | 0.000000 | 0.000000 | 0.000000 | 5.000000 | 320.000000 |
| Площадь тела | 442.0 | 0.962680 | 0.344912 | 0.290800 | 0.730000 | 0.970000 | 1.330000 | 1.390000 |
| Диурез, мл/кг | 442.0 | 56.164626 | 34.108535 | 0.000000 | 32.115385 | 48.503497 | 72.727273 | 229.333333 |
# сравнение средних
a = pd.DataFrame(df_only1[target_columns[2:-1]].drop('GT',axis=1).mean()).rename(columns = {0:'Группа 1: ГТ только в 1й день'})
a_ = []
for i in target_columns[2:-1]:
if i != 'GT':
a_.append(df_noGT[df_noGT[i]>0][i].mean())
a['Группа 2: не получает ГТ'] = a_
a
| Группа 1: ГТ только в 1й день | Группа 2: не получает ГТ | |
|---|---|---|
| Возраст | 7.338710 | 9.533793 |
| САД | 110.774194 | 110.757919 |
| ДАД | 63.887097 | 64.291855 |
| СрАД | 79.516129 | 79.780543 |
| ЧСС | 101.145161 | 105.434389 |
| ИА | 0.933377 | 0.977722 |
| SpO2 | 98.774194 | 98.490950 |
| Масса тела | 32.741935 | 40.165158 |
| Cl- | 107.988371 | 111.731211 |
| Лактат | 0.732258 | 1.743606 |
| Амилаза | 43.848387 | 97.194921 |
| АЛТ | 59.146774 | 103.277273 |
| АСТ | 81.050000 | 126.395332 |
| АЧТВ | 27.727419 | 34.429430 |
| Инфузия, % от N | 106.657416 | 120.564834 |
| КИ | 2.338710 | 14.389196 |
| Площадь тела | 1.062903 | 0.962680 |
| Диурез, мл/кг | 58.592842 | 57.332020 |
# Размер выборки
print(f'Количество пациентов в группах:\nПервая группа\t{df_only1.ID.nunique()}\nВторая группа\t{df_noGT.ID.nunique()}')
Количество пациентов в группах: Первая группа 12 Вторая группа 90
sns.barplot(data = [[0],[df_only1.ID.nunique()],[df_noGT.ID.nunique()]])
plt.xlim(0.5)
plt.title('Размер групп');
# for k,i in enumerate(target_columns[3:]):
# print('Параметр =',i,'\nСреднее = ',df_gt_more1day[i].mean(),'std =',df_gt_more1day[i].std(ddof=1))
figure,ax = plt.subplots(len(target_columns[3:-1]),4,figsize=(19,70))
for k,i in enumerate(target_columns[3:-1]):
try:
sns.histplot(df_only1[i],bins=10,ax=ax[k,0])
interval = np.linspace(0,1,int(df_only1[i].count()))
x = stats.norm.ppf(np.linspace(0,1,int(df_only1[i].count())),loc=df_only1[i].mean(),scale=df_only1[i].std(ddof=1))
y = np.quantile(df_only1[i],interval)
sns.lineplot(x = x,y = x,ax=ax[k,1],color='r')
sns.lineplot(x = x,y = y,ax=ax[k,1],color='b')
sns.scatterplot(x = np.linspace(0,int(df_only1[i].max()),int(df_only1[i].count())),y = df_only1[i],ax=ax[k,1],color='grey')
sns.histplot(df_noGT[i],bins=10,ax=ax[k,2])
interval = np.linspace(0,1,int(df_noGT[i].count()))
x = stats.norm.ppf(np.linspace(0,1,int(df_noGT[i].count())),loc=df_noGT[i].mean(),scale=df_noGT[i].std(ddof=1))
y = np.quantile(df_noGT[i],interval)
sns.lineplot(x = x,y = x,ax=ax[k,3],color='r')
sns.lineplot(x = x,y = y,ax=ax[k,3],color='b')
sns.scatterplot(x = np.linspace(0,int(df_noGT[i].max()),int(df_noGT[i].count())),y = df_noGT[i],ax=ax[k,3],color='grey')
ax[k,0].set_title(i+' (получали ГТ)')
ax[k,1].set_title(i+' (получали ГТ: QQ-plot)')
ax[k,2].set_title(i+' (не получали ГТ)')
ax[k,3].set_title(i+' (не получали ГТ: QQ-plot)')
plt.tight_layout()
except Exception:
ax[k,0].set_title(i+' (получали ГТ)')
ax[k,1].set_title(i+' (получали ГТ: QQ-plot)')
ax[k,2].set_title(i+' (не получали ГТ)')
ax[k,3].set_title(i+' (не получали ГТ: QQ-plot)')
plt.tight_layout()
pass
for k,i in enumerate(target_columns[3:-1]):
group0 = df_only1[i]
group1 = df_noGT[i]
alpha = 0.05
test_value, p = stats.kruskal(group0,group1)
if alpha<p:
append_list.append(['Этап 4',i,'значимость различия не доказана',p,alpha,group0.median(),group0.quantile(0.25),group0.quantile(0.75),\
group1.median(),group1.quantile(0.25),group1.quantile(0.75)])
else:
append_list.append(['Этап 4',i,'обнаружены значимые различия',p,alpha,group0.median(),group0.quantile(0.25),group0.quantile(0.75),\
group1.median(),group1.quantile(0.25),group1.quantile(0.75)])
# if alpha<p:
# print(f'Разница по параметру {i} между двумя группами не доказана.')
# print(f'\tСтатистика теста = {test_value}, p-значение = {p}')
# else:
# print(f'По параметру {i} наблюдается статистически достоверная разница между двумя группами.')
# print(f'\tСтатистика теста = {test_value}, p-значение = {p}')
результаты представлены в сводной таблице (см. ниже)
df_any_users = df.loc[df.GT==1,'ID'].unique()
df_any = df.loc[df.ID.isin(df_any_users),:]
df_noGT_users = df.groupby('ID',as_index=False).max()
df_noGT_users = df_noGT_users.loc[df_noGT_users.GT==0,'ID']
df_noGT = df.loc[df.ID.isin(df_noGT_users),:]
df_any[target_columns[2:]].drop('GT',axis=1).describe().T
| count | mean | std | min | 25% | 50% | 75% | max | |
|---|---|---|---|---|---|---|---|---|
| Возраст | 950.0 | 10.169496 | 5.463123 | 0.250000 | 5.000000 | 12.000000 | 15.000000 | 17.000000 |
| САД | 950.0 | 111.498947 | 15.995175 | 45.000000 | 101.000000 | 110.000000 | 120.000000 | 170.000000 |
| ДАД | 950.0 | 65.114737 | 13.107262 | 5.000000 | 56.000000 | 65.000000 | 75.000000 | 110.000000 |
| СрАД | 950.0 | 80.576140 | 13.194491 | 26.333333 | 73.333333 | 80.833333 | 90.000000 | 120.666667 |
| ЧСС | 950.0 | 105.881053 | 23.499379 | 24.000000 | 90.000000 | 105.000000 | 120.000000 | 186.000000 |
| ИА | 950.0 | 0.974400 | 0.296070 | 0.200000 | 0.782609 | 0.926121 | 1.096178 | 3.100000 |
| SpO2 | 950.0 | 98.324211 | 3.627861 | 26.000000 | 98.000000 | 99.000000 | 100.000000 | 110.000000 |
| Масса тела | 950.0 | 40.862105 | 22.366497 | 6.000000 | 20.000000 | 45.000000 | 60.000000 | 100.000000 |
| Cl- | 950.0 | 111.966233 | 12.231454 | 31.000000 | 104.000000 | 109.000000 | 116.000000 | 193.000000 |
| Лактат | 950.0 | 1.544632 | 1.888258 | -1.100000 | 0.700000 | 1.300000 | 2.000000 | 25.000000 |
| Амилаза | 950.0 | 112.908642 | 173.921494 | 0.000000 | 0.000000 | 61.000000 | 141.500000 | 1940.000000 |
| АЛТ | 950.0 | 77.092779 | 158.850638 | 0.000000 | 23.000000 | 40.350000 | 74.225000 | 2865.000000 |
| АСТ | 950.0 | 102.830789 | 200.358409 | 0.000000 | 31.925000 | 50.600000 | 97.262500 | 2458.300000 |
| АЧТВ | 950.0 | 26.216789 | 17.708873 | 0.000000 | 23.550000 | 30.000000 | 34.387500 | 162.000000 |
| Инфузия, % от N | 950.0 | 125.897526 | 55.098593 | 0.000000 | 95.468750 | 119.125000 | 143.472222 | 647.916667 |
| КИ | 950.0 | 8.891968 | 36.776043 | 0.000000 | 0.000000 | 5.000000 | 7.000000 | 956.600000 |
| Площадь тела | 950.0 | 0.951258 | 0.328448 | 0.250000 | 0.660000 | 1.030000 | 1.210000 | 1.450000 |
| Диурез, мл/кг | 950.0 | 54.746808 | 35.783735 | 0.000000 | 30.000000 | 46.201923 | 70.833333 | 280.000000 |
df_noGT[target_columns[2:]].drop('GT',axis=1).describe().T
| count | mean | std | min | 25% | 50% | 75% | max | |
|---|---|---|---|---|---|---|---|---|
| Возраст | 442.0 | 9.533793 | 5.402981 | 0.250000 | 4.000000 | 11.000000 | 15.000000 | 18.000000 |
| САД | 442.0 | 110.757919 | 15.134701 | 50.000000 | 100.000000 | 110.000000 | 120.000000 | 170.000000 |
| ДАД | 442.0 | 64.291855 | 11.203473 | 26.000000 | 60.000000 | 64.500000 | 70.000000 | 119.000000 |
| СрАД | 442.0 | 79.780543 | 11.529464 | 34.000000 | 73.333333 | 80.000000 | 86.666667 | 117.333333 |
| ЧСС | 442.0 | 105.434389 | 23.485828 | 40.000000 | 90.000000 | 107.000000 | 120.000000 | 180.000000 |
| ИА | 442.0 | 0.977722 | 0.290774 | 0.381356 | 0.772942 | 0.989181 | 1.127008 | 2.250000 |
| SpO2 | 442.0 | 98.490950 | 2.585703 | 70.000000 | 98.000000 | 99.000000 | 100.000000 | 100.000000 |
| Масса тела | 442.0 | 40.165158 | 23.323659 | 6.000000 | 16.500000 | 40.000000 | 60.000000 | 103.000000 |
| Cl- | 442.0 | 111.731211 | 14.160864 | 85.000000 | 104.000000 | 108.744756 | 113.925000 | 191.000000 |
| Лактат | 442.0 | 1.301787 | 1.358736 | 0.000000 | 0.000000 | 1.100000 | 1.700000 | 17.000000 |
| Амилаза | 442.0 | 69.267873 | 149.430565 | 0.000000 | 0.000000 | 39.000000 | 78.975000 | 2520.000000 |
| АЛТ | 442.0 | 92.528959 | 172.734534 | 0.000000 | 18.700000 | 35.000000 | 92.750000 | 1384.000000 |
| АСТ | 442.0 | 112.097217 | 229.037349 | 0.000000 | 28.900000 | 52.000000 | 103.175000 | 2242.000000 |
| АЧТВ | 442.0 | 24.614706 | 17.835235 | 0.000000 | 0.000000 | 30.000000 | 37.000000 | 67.000000 |
| Инфузия, % от N | 442.0 | 118.928207 | 49.901537 | 0.000000 | 93.170732 | 112.254684 | 143.658425 | 295.701754 |
| КИ | 442.0 | 6.478394 | 21.513932 | 0.000000 | 0.000000 | 0.000000 | 5.000000 | 320.000000 |
| Площадь тела | 442.0 | 0.962680 | 0.344912 | 0.290800 | 0.730000 | 0.970000 | 1.330000 | 1.390000 |
| Диурез, мл/кг | 442.0 | 56.164626 | 34.108535 | 0.000000 | 32.115385 | 48.503497 | 72.727273 | 229.333333 |
# сравнение средних
a = pd.DataFrame(df_any[target_columns[2:-1]].drop('GT',axis=1).mean()).rename(columns = {0:'Группа 1: получает ГТ'})
a_ = []
for i in target_columns[2:-1]:
if i != 'GT':
a_.append(df_noGT[df_noGT[i]>0][i].mean())
a['Группа 2: не получает ГТ'] = a_
a
| Группа 1: получает ГТ | Группа 2: не получает ГТ | |
|---|---|---|
| Возраст | 10.169496 | 9.533793 |
| САД | 111.498947 | 110.757919 |
| ДАД | 65.114737 | 64.291855 |
| СрАД | 80.576140 | 79.780543 |
| ЧСС | 105.881053 | 105.434389 |
| ИА | 0.974400 | 0.977722 |
| SpO2 | 98.324211 | 98.490950 |
| Масса тела | 40.862105 | 40.165158 |
| Cl- | 111.966233 | 111.731211 |
| Лактат | 1.544632 | 1.743606 |
| Амилаза | 112.908642 | 97.194921 |
| АЛТ | 77.092779 | 103.277273 |
| АСТ | 102.830789 | 126.395332 |
| АЧТВ | 26.216789 | 34.429430 |
| Инфузия, % от N | 125.897526 | 120.564834 |
| КИ | 8.891968 | 14.389196 |
| Площадь тела | 0.951258 | 0.962680 |
| Диурез, мл/кг | 54.746808 | 57.332020 |
# Размер выборки
print(f'Количество пациентов в группах:\nПервая группа\t{df_any.ID.nunique()}\nВторая группа\t{df_noGT.ID.nunique()}')
Количество пациентов в группах: Первая группа 113 Вторая группа 90
sns.barplot(data = [[0],[df_any.ID.nunique()],[df_noGT.ID.nunique()]])
plt.xlim(0.5)
plt.title('Размер групп');
# for k,i in enumerate(target_columns[3:]):
# print('Параметр =',i,'\nСреднее = ',df_gt_more1day[i].mean(),'std =',df_gt_more1day[i].std(ddof=1))
figure,ax = plt.subplots(len(target_columns[3:-1]),4,figsize=(19,70))
for k,i in enumerate(target_columns[3:-1]):
try:
sns.histplot(df_any[i],bins=10,ax=ax[k,0])
interval = np.linspace(0,1,int(df_any[i].count()))
x = stats.norm.ppf(np.linspace(0,1,int(df_any[i].count())),loc=df_any[i].mean(),scale=df_any[i].std(ddof=1))
y = np.quantile(df_any[i],interval)
sns.lineplot(x = x,y = x,ax=ax[k,1],color='r')
sns.lineplot(x = x,y = y,ax=ax[k,1],color='b')
sns.scatterplot(x = np.linspace(0,int(df_any[i].max()),int(df_any[i].count())),y = df_any[i],ax=ax[k,1],color='grey')
sns.histplot(df_noGT[i],bins=10,ax=ax[k,2])
interval = np.linspace(0,1,int(df_noGT[i].count()))
x = stats.norm.ppf(np.linspace(0,1,int(df_noGT[i].count())),loc=df_noGT[i].mean(),scale=df_noGT[i].std(ddof=1))
y = np.quantile(df_noGT[i],interval)
sns.lineplot(x = x,y = x,ax=ax[k,3],color='r')
sns.lineplot(x = x,y = y,ax=ax[k,3],color='b')
sns.scatterplot(x = np.linspace(0,int(df_noGT[i].max()),int(df_noGT[i].count())),y = df_noGT[i],ax=ax[k,3],color='grey')
ax[k,0].set_title(i+' (получали ГТ)')
ax[k,1].set_title(i+' (получали ГТ: QQ-plot)')
ax[k,2].set_title(i+' (не получали ГТ)')
ax[k,3].set_title(i+' (не получали ГТ: QQ-plot)')
plt.tight_layout()
except Exception:
ax[k,0].set_title(i+' (получали ГТ)')
ax[k,1].set_title(i+' (получали ГТ: QQ-plot)')
ax[k,2].set_title(i+' (не получали ГТ)')
ax[k,3].set_title(i+' (не получали ГТ: QQ-plot)')
plt.tight_layout()
pass
for k,i in enumerate(target_columns[3:-1]):
group0 = df_any[i]
group1 = df_noGT[i]
alpha = 0.05
test_value, p = stats.kruskal(group0,group1)
if alpha<p:
append_list.append(['Этап 5',i,'значимость различия не доказана',p,alpha,group0.median(),group0.quantile(0.25),group0.quantile(0.75),\
group1.median(),group1.quantile(0.25),group1.quantile(0.75)])
else:
append_list.append(['Этап 5',i,'обнаружены значимые различия',p,alpha,group0.median(),group0.quantile(0.25),group0.quantile(0.75),\
group1.median(),group1.quantile(0.25),group1.quantile(0.75)])
if alpha<p:
print(f'Разница по параметру {i} между двумя группами не доказана.')
print(f'\tСтатистика теста = {test_value}, p-значение = {p}')
else:
print(f'По параметру {i} наблюдается статистически достоверная разница между двумя группами.')
print(f'\tСтатистика теста = {test_value}, p-значение = {p}')
По параметру GT наблюдается статистически достоверная разница между двумя группами. Статистика теста = 308.14877267399817, p-значение = 5.527209682796086e-69 Разница по параметру САД между двумя группами не доказана. Статистика теста = 0.789104211346105, p-значение = 0.3743711298061947 Разница по параметру ДАД между двумя группами не доказана. Статистика теста = 2.7054287237733887, p-значение = 0.10000719410523369 Разница по параметру СрАД между двумя группами не доказана. Статистика теста = 3.0993025343491, p-значение = 0.07832584439605056 Разница по параметру ЧСС между двумя группами не доказана. Статистика теста = 0.11643911886382965, p-значение = 0.7329291102177846 Разница по параметру ИА между двумя группами не доказана. Статистика теста = 1.6827012673646609, p-значение = 0.1945659039824976 Разница по параметру SpO2 между двумя группами не доказана. Статистика теста = 1.4013909315768618, p-значение = 0.23649082215979317 Разница по параметру Масса тела между двумя группами не доказана. Статистика теста = 0.5132014739655003, p-значение = 0.4737562370529689 Разница по параметру Cl- между двумя группами не доказана. Статистика теста = 1.3563912947662462, p-значение = 0.24416388211336565 По параметру Лактат наблюдается статистически достоверная разница между двумя группами. Статистика теста = 4.345382051745382, p-значение = 0.03710944035028754 По параметру Амилаза наблюдается статистически достоверная разница между двумя группами. Статистика теста = 23.36307258502768, p-значение = 1.3412884804072379e-06 Разница по параметру АЛТ между двумя группами не доказана. Статистика теста = 1.0558792745562107, p-значение = 0.3041569120249382 Разница по параметру АСТ между двумя группами не доказана. Статистика теста = 0.2507335853078321, p-значение = 0.6165590105483493 Разница по параметру АЧТВ между двумя группами не доказана. Статистика теста = 0.31955488822393074, p-значение = 0.5718752636675102 Разница по параметру Инфузия, % от N между двумя группами не доказана. Статистика теста = 3.2274101479296515, p-значение = 0.07241512567509965 По параметру КИ наблюдается статистически достоверная разница между двумя группами. Статистика теста = 44.58962956570288, p-значение = 2.4297524397228827e-11 Разница по параметру Площадь тела между двумя группами не доказана. Статистика теста = 1.1527486425364868, p-значение = 0.28297450085997505 Разница по параметру Диурез, мл/кг между двумя группами не доказана. Статистика теста = 2.2854119663953787, p-значение = 0.1305954615441217
group0 = df_any['КИ'].drop(df_any.loc[df_any['КИ']>800,:].index,axis=0)
group1 = df_noGT['КИ']
alpha = 0.05
test_value, p = stats.kruskal(group0,group1)
if alpha<p:
print(f'Разница по параметру КИ между двумя группами не доказана.')
print(f'\tСтатистика теста = {test_value}, p-значение = {p}')
else:
print(f'По параметру КИ наблюдается статистически достоверная разница между двумя группами.')
print(f'\tСтатистика теста = {test_value}, p-значение = {p}')
По параметру КИ наблюдается статистически достоверная разница между двумя группами. Статистика теста = 44.23698594591091, p-значение = 2.909321225967024e-11
def highlight_greaterthan(x):
color = 'lightgreen' if x<0.05 else 'white'
return 'background-color: %s' % color
columns = ['Вариант', 'Показатель', 'Значимость различий', 'p_value', 'alpha','Медиана (1)','25 центиль (1)','75 центиль (1)','Медиана (2)','25 центиль (2)','75 центиль (2)']
df_results = pd.DataFrame(append_list).set_axis(columns, axis=1)
df_results.columns = columns
df_results = df_results.drop(['Значимость различий','alpha'], axis=1).pivot(columns = ['Вариант'],index = 'Показатель',values = ['p_value', 'Медиана (1)','25 центиль (1)','75 центиль (1)','Медиана (2)','25 центиль (2)','75 центиль (2)']).drop('GT',axis=0)
df_results = df_results.style.applymap(highlight_greaterthan)
df_results
| p_value | Медиана (1) | 25 центиль (1) | 75 центиль (1) | Медиана (2) | 25 центиль (2) | 75 центиль (2) | |||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Вариант | Этап 1 | Этап 2 | Этап 3 | Этап 4 | Этап 5 | Этап 1 | Этап 2 | Этап 3 | Этап 4 | Этап 5 | Этап 1 | Этап 2 | Этап 3 | Этап 4 | Этап 5 | Этап 1 | Этап 2 | Этап 3 | Этап 4 | Этап 5 | Этап 1 | Этап 2 | Этап 3 | Этап 4 | Этап 5 | Этап 1 | Этап 2 | Этап 3 | Этап 4 | Этап 5 | Этап 1 | Этап 2 | Этап 3 | Этап 4 | Этап 5 |
| Показатель | |||||||||||||||||||||||||||||||||||
| Cl- | 0.530669 | 0.170343 | 0.000010 | 0.050680 | 0.244164 | 108.744756 | 108.744756 | 108.000000 | 108.000000 | 109.000000 | 104.000000 | 104.000000 | 102.300000 | 102.300000 | 104.000000 | 113.000000 | 114.000000 | 110.750000 | 110.750000 | 116.000000 | 108.000000 | 108.000000 | 111.000000 | 108.744756 | 108.744756 | 104.750000 | 102.300000 | 106.000000 | 104.000000 | 104.000000 | 110.250000 | 110.750000 | 121.000000 | 113.925000 | 113.925000 |
| SpO2 | 0.752932 | 0.487279 | 0.628304 | 0.909820 | 0.236491 | 100.000000 | 99.000000 | 99.000000 | 99.000000 | 99.000000 | 98.000000 | 98.000000 | 98.000000 | 98.000000 | 98.000000 | 100.000000 | 100.000000 | 100.000000 | 100.000000 | 100.000000 | 99.000000 | 99.000000 | 99.000000 | 99.000000 | 99.000000 | 98.000000 | 98.000000 | 98.000000 | 98.000000 | 98.000000 | 100.000000 | 100.000000 | 100.000000 | 100.000000 | 100.000000 |
| АЛТ | 0.975858 | 0.058156 | 0.179017 | 0.490306 | 0.304157 | 36.000000 | 42.800000 | 27.200000 | 27.200000 | 40.350000 | 12.600000 | 23.437500 | 18.975000 | 18.975000 | 23.000000 | 97.250000 | 78.750000 | 74.900000 | 74.900000 | 74.225000 | 31.650000 | 27.200000 | 38.880000 | 35.000000 | 35.000000 | 15.650000 | 18.975000 | 24.250000 | 18.700000 | 18.700000 | 95.325000 | 74.900000 | 62.025000 | 92.750000 | 92.750000 |
| АСТ | 0.505087 | 0.796281 | 0.045298 | 0.460869 | 0.616559 | 53.100000 | 55.500000 | 52.500000 | 52.500000 | 50.600000 | 0.000000 | 34.975000 | 38.000000 | 38.000000 | 31.925000 | 140.700000 | 116.000000 | 98.300000 | 98.300000 | 97.262500 | 58.200000 | 52.500000 | 47.000000 | 52.000000 | 52.000000 | 27.875000 | 38.000000 | 28.400000 | 28.900000 | 28.900000 | 162.650000 | 98.300000 | 74.700000 | 103.175000 | 103.175000 |
| АЧТВ | 0.437916 | 0.046088 | 0.010146 | 0.885253 | 0.571875 | 23.500000 | 27.800000 | 29.200000 | 29.200000 | 30.000000 | 0.000000 | 0.000000 | 26.962500 | 26.962500 | 23.550000 | 31.000000 | 34.050000 | 33.675000 | 33.675000 | 34.387500 | 0.000000 | 29.200000 | 32.000000 | 30.000000 | 30.000000 | 0.000000 | 26.962500 | 28.775000 | 0.000000 | 0.000000 | 30.000000 | 33.675000 | 34.800000 | 37.000000 | 37.000000 |
| Амилаза | 0.172694 | 0.021492 | 0.000000 | 0.198576 | 0.000001 | 15.300000 | 49.300000 | 33.000000 | 33.000000 | 61.000000 | 0.000000 | 0.000000 | 0.000000 | 0.000000 | 0.000000 | 50.850000 | 172.025000 | 64.475000 | 64.475000 | 141.500000 | 0.000000 | 33.000000 | 72.000000 | 39.000000 | 39.000000 | 0.000000 | 0.000000 | 50.075000 | 0.000000 | 0.000000 | 43.975000 | 64.475000 | 129.700000 | 78.975000 | 78.975000 |
| ДАД | 0.291620 | 0.124629 | 0.421296 | 0.500656 | 0.100007 | 60.000000 | 65.000000 | 63.000000 | 63.000000 | 65.000000 | 55.500000 | 60.000000 | 55.000000 | 55.000000 | 56.000000 | 70.000000 | 75.000000 | 70.000000 | 70.000000 | 75.000000 | 60.500000 | 63.000000 | 65.000000 | 64.500000 | 64.500000 | 50.000000 | 55.000000 | 55.500000 | 60.000000 | 60.000000 | 70.000000 | 70.000000 | 75.000000 | 70.000000 | 70.000000 |
| Диурез, мл/кг | 0.423433 | 0.047508 | 0.137048 | 0.900328 | 0.130595 | 30.303030 | 42.500000 | 51.416667 | 51.416667 | 46.201923 | 15.250000 | 28.000000 | 29.060526 | 29.060526 | 30.000000 | 54.916667 | 58.150106 | 83.333333 | 83.333333 | 70.833333 | 33.458333 | 51.416667 | 53.300000 | 48.503497 | 48.503497 | 13.722222 | 29.060526 | 37.500000 | 32.115385 | 32.115385 | 63.072082 | 83.333333 | 88.794444 | 72.727273 | 72.727273 |
| ИА | 0.413728 | 0.506601 | 0.086575 | 0.155302 | 0.194566 | 1.000000 | 0.909091 | 0.865385 | 0.865385 | 0.926121 | 0.825121 | 0.775182 | 0.780200 | 0.780200 | 0.782609 | 1.211702 | 1.090909 | 1.065152 | 1.065152 | 1.096178 | 1.078499 | 0.865385 | 0.970874 | 0.989181 | 0.989181 | 0.855820 | 0.780200 | 0.810795 | 0.772942 | 0.772942 | 1.273694 | 1.065152 | 1.109244 | 1.127008 | 1.127008 |
| Инфузия, % от N | 0.987496 | 0.141550 | 0.000001 | 0.084855 | 0.072415 | 79.166667 | 112.729691 | 107.430341 | 107.430341 | 119.125000 | 56.039136 | 89.583333 | 82.251450 | 82.251450 | 95.468750 | 122.143500 | 138.134470 | 131.557349 | 131.557349 | 143.472222 | 79.737634 | 107.430341 | 129.787234 | 112.254684 | 112.254684 | 54.614504 | 82.251450 | 109.687500 | 93.170732 | 93.170732 | 116.593750 | 131.557349 | 160.270833 | 143.658425 | 143.658425 |
| КИ | 0.142119 | 0.000000 | 0.000000 | 0.017552 | 0.000000 | 0.000000 | 4.500000 | 0.000000 | 0.000000 | 5.000000 | 0.000000 | 0.000000 | 0.000000 | 0.000000 | 0.000000 | 1.250000 | 7.500000 | 4.375000 | 4.375000 | 7.000000 | 0.000000 | 0.000000 | 5.000000 | 0.000000 | 0.000000 | 0.000000 | 0.000000 | 1.250000 | 0.000000 | 0.000000 | 5.000000 | 4.375000 | 7.500000 | 5.000000 | 5.000000 |
| Лактат | 0.539150 | 0.000000 | 0.000000 | 0.000005 | 0.037109 | 1.000000 | 1.300000 | 0.000000 | 0.000000 | 1.300000 | 0.000000 | 0.000000 | 0.000000 | 0.000000 | 0.700000 | 2.500000 | 2.100000 | 1.300000 | 1.300000 | 2.000000 | 1.250000 | 0.000000 | 1.300000 | 1.100000 | 1.100000 | 0.000000 | 0.000000 | 1.000000 | 0.000000 | 0.000000 | 2.800000 | 1.300000 | 1.900000 | 1.700000 | 1.700000 |
| Масса тела | 0.950929 | 0.001957 | 0.134864 | 0.039056 | 0.473756 | 30.000000 | 45.000000 | 21.500000 | 21.500000 | 45.000000 | 16.000000 | 20.000000 | 15.000000 | 15.000000 | 20.000000 | 50.000000 | 60.000000 | 57.500000 | 57.500000 | 60.000000 | 30.000000 | 21.500000 | 50.000000 | 40.000000 | 40.000000 | 18.000000 | 15.000000 | 15.000000 | 16.500000 | 16.500000 | 51.250000 | 57.500000 | 50.000000 | 60.000000 | 60.000000 |
| Площадь тела | 0.222210 | 0.395471 | 0.000001 | 0.099701 | 0.282975 | 0.850000 | 1.090000 | 1.090000 | 1.090000 | 1.030000 | 0.610000 | 0.790000 | 0.910000 | 0.910000 | 0.660000 | 1.210000 | 1.270000 | 1.255000 | 1.255000 | 1.210000 | 1.030000 | 1.090000 | 0.670000 | 0.970000 | 0.970000 | 0.610000 | 0.910000 | 0.610000 | 0.730000 | 0.730000 | 1.210000 | 1.255000 | 1.210000 | 1.330000 | 1.330000 |
| САД | 0.735154 | 0.320013 | 0.954688 | 0.879427 | 0.374371 | 110.000000 | 112.500000 | 113.500000 | 113.500000 | 110.000000 | 92.500000 | 104.000000 | 102.750000 | 102.750000 | 101.000000 | 120.000000 | 120.000000 | 118.750000 | 118.750000 | 120.000000 | 106.500000 | 113.500000 | 110.000000 | 110.000000 | 110.000000 | 90.000000 | 102.750000 | 100.000000 | 100.000000 | 100.000000 | 118.500000 | 118.750000 | 120.000000 | 120.000000 | 120.000000 |
| СрАД | 0.469319 | 0.135631 | 0.641475 | 0.677084 | 0.078326 | 77.333333 | 81.666667 | 77.500000 | 77.500000 | 80.833333 | 68.833333 | 73.333333 | 73.083333 | 73.083333 | 73.333333 | 86.333333 | 90.083333 | 85.750000 | 85.750000 | 90.000000 | 77.666667 | 77.500000 | 80.000000 | 80.000000 | 80.000000 | 66.666667 | 73.083333 | 71.833333 | 73.333333 | 73.333333 | 85.666667 | 85.750000 | 90.000000 | 86.666667 | 86.666667 |
| ЧСС | 0.562531 | 0.191232 | 0.035325 | 0.086939 | 0.732929 | 110.000000 | 105.000000 | 98.500000 | 98.500000 | 105.000000 | 92.000000 | 88.750000 | 89.000000 | 89.000000 | 90.000000 | 125.000000 | 120.000000 | 118.250000 | 118.250000 | 120.000000 | 112.500000 | 98.500000 | 109.000000 | 107.000000 | 107.000000 | 96.000000 | 89.000000 | 90.000000 | 90.000000 | 90.000000 | 122.000000 | 118.250000 | 120.500000 | 120.000000 | 120.000000 |
group0 = df[df['OUTCOME']=='Survived']
group1 = df[df['OUTCOME']=='Died']
figure,ax = plt.subplots(len(target_columns[2:-1]),4,figsize=(19,75))
for k,i in enumerate(target_columns[2:-1]):
try:
sns.histplot(group0[i],bins=10,ax=ax[k,0])
interval = np.linspace(0,1,int(group0[i].count()))
x = stats.norm.ppf(np.linspace(0,1,int(group0[i].count())),loc=group0[i].mean(),scale=group0[i].std(ddof=1))
y = np.quantile(group0[i],interval)
sns.lineplot(x = x,y = x,ax=ax[k,1],color='r')
sns.lineplot(x = x,y = y,ax=ax[k,1],color='b')
sns.scatterplot(x = np.linspace(0,int(group0[i].max()),int(group0[i].count())),y = group0[i],ax=ax[k,1],color='grey')
sns.histplot(group1[i],bins=10,ax=ax[k,2])
interval = np.linspace(0,1,int(group1[i].count()))
x = stats.norm.ppf(np.linspace(0,1,int(group1[i].count())),loc=group1[i].mean(),scale=group1[i].std(ddof=1))
y = np.quantile(group1[i],interval)
sns.lineplot(x = x,y = x,ax=ax[k,3],color='r')
sns.lineplot(x = x,y = y,ax=ax[k,3],color='b')
sns.scatterplot(x = np.linspace(0,int(group1[i].max()),int(group1[i].count())),y = group1[i],ax=ax[k,3],color='grey')
ax[k,0].set_title(i+' (выжившие пациенты)')
ax[k,1].set_title(i+' (выжившие пациенты: QQ-plot)')
ax[k,2].set_title(i+' (умершие пациенты)')
ax[k,3].set_title(i+' (умершие пациенты: QQ-plot)')
plt.tight_layout()
except Exception:
ax[k,0].set_title(i+' (выжившие пациенты)')
ax[k,1].set_title(i+' (выжившие пациенты: QQ-plot)')
ax[k,2].set_title(i+' (умершие пациенты)')
ax[k,3].set_title(i+' (умершие пациенты: QQ-plot)')
plt.tight_layout()
pass
Все вместе:
df.groupby('OUTCOME',as_index=False)['ID'].nunique().replace({'Died':'Умерли','Survived':'Выжили'})
| OUTCOME | ID | |
|---|---|---|
| 0 | Умерли | 19 |
| 1 | Выжили | 184 |
Имеется сильная асимметрия выборки: большинство пациентов выжили; 19 - умерли.
# количество умерших (Died) и выживших (Survived) пациентов
fig, ax = plt.subplots()
sns.barplot(data = [[i] for i in df.groupby('OUTCOME',as_index=False)['ID'].nunique()['ID']])
ax.set_xticklabels(['Умерли', 'Выжили'])
plt.show()
Описательная статистика: Выжившие пациенты
# описательная статистика выживших пациентов
df[df['OUTCOME']=='Survived'][target_columns[2:-1]].describe().T
| count | mean | std | min | 25% | 50% | 75% | max | |
|---|---|---|---|---|---|---|---|---|
| Возраст | 1232.0 | 10.154795 | 5.538551 | 0.25 | 4.000000 | 12.000000 | 15.000000 | 18.000000 |
| GT | 1232.0 | 0.293831 | 0.455701 | 0.00 | 0.000000 | 0.000000 | 1.000000 | 1.000000 |
| САД | 1232.0 | 112.331981 | 14.082478 | 50.00 | 104.000000 | 110.000000 | 120.000000 | 170.000000 |
| ДАД | 1232.0 | 65.692370 | 11.614174 | 5.00 | 60.000000 | 65.000000 | 73.000000 | 119.000000 |
| СрАД | 1232.0 | 81.238907 | 11.469878 | 30.00 | 73.333333 | 81.333333 | 88.333333 | 117.666667 |
| ЧСС | 1232.0 | 105.797890 | 23.279370 | 24.00 | 90.000000 | 106.000000 | 120.000000 | 180.000000 |
| ИА | 1232.0 | 0.962915 | 0.278175 | 0.20 | 0.772727 | 0.933333 | 1.100000 | 2.800000 |
| SpO2 | 1232.0 | 98.581169 | 2.996055 | 26.00 | 98.000000 | 99.000000 | 100.000000 | 110.000000 |
| Масса тела | 1232.0 | 41.689123 | 23.182670 | 6.00 | 18.000000 | 45.000000 | 60.000000 | 103.000000 |
| Cl- | 1232.0 | 110.864558 | 11.799959 | 31.00 | 104.000000 | 108.744756 | 114.000000 | 191.000000 |
| Лактат | 1232.0 | 1.374789 | 1.310977 | -1.10 | 0.800000 | 1.200000 | 1.800000 | 25.000000 |
| Амилаза | 1232.0 | 108.360438 | 172.023681 | 0.00 | 19.662500 | 61.000000 | 129.775000 | 2520.000000 |
| АЛТ | 1232.0 | 77.758352 | 147.442066 | 0.00 | 20.500000 | 36.750000 | 71.100000 | 1885.200000 |
| АСТ | 1232.0 | 97.160081 | 198.807334 | 0.00 | 30.000000 | 48.300000 | 83.387500 | 2242.000000 |
| АЧТВ | 1232.0 | 26.167654 | 15.476217 | 0.00 | 24.000000 | 30.000000 | 35.000000 | 125.000000 |
| Инфузия, % от N | 1232.0 | 123.529011 | 54.246247 | 0.00 | 95.026596 | 116.583333 | 142.742529 | 647.916667 |
| КИ | 1232.0 | 5.558620 | 14.590389 | 0.00 | 0.000000 | 2.500000 | 5.000000 | 199.200000 |
| Площадь тела | 1232.0 | 0.952451 | 0.331919 | 0.25 | 0.670000 | 1.030000 | 1.270000 | 1.390000 |
| Диурез, мл/кг | 1232.0 | 55.327892 | 35.223939 | 0.00 | 30.595631 | 46.733333 | 72.500000 | 280.000000 |
Описательная статистика: Умершие пациенты
# описательная статистика умерших пациентов
df[df['OUTCOME']=='Died'][target_columns[2:-1]].describe().T
| count | mean | std | min | 25% | 50% | 75% | max | |
|---|---|---|---|---|---|---|---|---|
| Возраст | 160.0 | 8.526563 | 4.473692 | 0.250000 | 5.250000 | 9.000000 | 13.000000 | 17.000000 |
| GT | 160.0 | 0.543750 | 0.499646 | 0.000000 | 0.000000 | 1.000000 | 1.000000 | 1.000000 |
| САД | 160.0 | 103.037500 | 23.474565 | 45.000000 | 86.500000 | 103.000000 | 117.000000 | 165.000000 |
| ДАД | 160.0 | 58.393750 | 16.823949 | 17.000000 | 46.750000 | 59.500000 | 70.000000 | 99.000000 |
| СрАД | 160.0 | 73.275000 | 18.274426 | 26.333333 | 60.000000 | 73.333333 | 86.833333 | 120.666667 |
| ЧСС | 160.0 | 105.287500 | 25.105410 | 41.000000 | 90.000000 | 106.000000 | 121.250000 | 186.000000 |
| ИА | 160.0 | 1.072014 | 0.384730 | 0.464000 | 0.838539 | 0.990990 | 1.191877 | 3.100000 |
| SpO2 | 160.0 | 96.806250 | 4.984879 | 69.000000 | 98.000000 | 98.000000 | 99.000000 | 100.000000 |
| Масса тела | 160.0 | 32.568750 | 16.142300 | 6.000000 | 20.000000 | 30.000000 | 43.000000 | 75.000000 |
| Cl- | 160.0 | 119.799886 | 17.324053 | 60.600000 | 108.744756 | 114.500000 | 133.250000 | 193.000000 |
| Лактат | 160.0 | 2.181563 | 3.553529 | 0.000000 | 0.000000 | 1.100000 | 2.800000 | 20.000000 |
| Амилаза | 160.0 | 27.372188 | 105.539960 | 0.000000 | 0.000000 | 0.000000 | 0.000000 | 892.000000 |
| АЛТ | 160.0 | 114.610313 | 253.571733 | 0.000000 | 39.375000 | 71.000000 | 113.000000 | 2865.000000 |
| АСТ | 160.0 | 172.093750 | 272.496902 | 0.000000 | 42.100000 | 111.000000 | 183.000000 | 2458.300000 |
| АЧТВ | 160.0 | 22.169375 | 29.838148 | 0.000000 | 0.000000 | 24.000000 | 38.000000 | 162.000000 |
| Инфузия, % от N | 160.0 | 124.882344 | 48.315790 | 0.000000 | 93.714326 | 125.884109 | 147.916667 | 300.176471 |
| КИ | 160.0 | 27.891250 | 85.292433 | 0.000000 | 5.000000 | 8.000000 | 20.000000 | 956.600000 |
| Площадь тела | 160.0 | 0.973625 | 0.347461 | 0.410000 | 0.730000 | 0.970000 | 1.285000 | 1.450000 |
| Диурез, мл/кг | 160.0 | 54.189184 | 35.582893 | 0.000000 | 32.750000 | 45.684524 | 70.857558 | 179.500000 |
# сравнение средних
a = pd.DataFrame(df[df['OUTCOME']=='Died'][target_columns[2:-1]].drop('GT',axis=1).mean()).rename(columns = {0:'Группа 1: умерли'})
a_ = []
for i in target_columns[2:-1]:
if i != 'GT':
a_.append(df[df['OUTCOME']=='Survived'][i].mean())
a['Группа 2: выжили'] = a_
a
| Группа 1: умерли | Группа 2: выжили | |
|---|---|---|
| Возраст | 8.526563 | 10.154795 |
| САД | 103.037500 | 112.331981 |
| ДАД | 58.393750 | 65.692370 |
| СрАД | 73.275000 | 81.238907 |
| ЧСС | 105.287500 | 105.797890 |
| ИА | 1.072014 | 0.962915 |
| SpO2 | 96.806250 | 98.581169 |
| Масса тела | 32.568750 | 41.689123 |
| Cl- | 119.799886 | 110.864558 |
| Лактат | 2.181563 | 1.374789 |
| Амилаза | 27.372188 | 108.360438 |
| АЛТ | 114.610313 | 77.758352 |
| АСТ | 172.093750 | 97.160081 |
| АЧТВ | 22.169375 | 26.167654 |
| Инфузия, % от N | 124.882344 | 123.529011 |
| КИ | 27.891250 | 5.558620 |
| Площадь тела | 0.973625 | 0.952451 |
| Диурез, мл/кг | 54.189184 | 55.327892 |
Проверка наличия значимой разницы между группами выживших и умерших пациентов
# для сохранения результатов в виде таблицы
columns = ['Вариант','Показатель','Значимость различий','p_value','alpha']
append_list = []
# т.к. выборки разного размера, в одной из них - мало данных, распределение не нормальное (графики ниже), воспользуемся тестом Краскела-Уоллиса
for k,i in enumerate(target_columns[2:-1]):
group0 = df[df['OUTCOME']=='Survived'][i]
group1 = df[df['OUTCOME']=='Died'][i]
alpha = 0.05
test_value, p = stats.kruskal(group0,group1)
if alpha<p:
append_list.append(['Все пациенты',i,'значимость различия не доказана',p,alpha,group0.median(),group0.quantile(0.25),group0.quantile(0.75),\
group1.median(),group1.quantile(0.25),group1.quantile(0.75)])
else:
append_list.append(['Все пациенты',i,'обнаружены значимые различия',p,alpha,group0.median(),group0.quantile(0.25),group0.quantile(0.75),\
group1.median(),group1.quantile(0.25),group1.quantile(0.75)])
a = df[df['GT']==1].groupby('OUTCOME',as_index=False)['ID'].nunique().replace({'Died':'Умерли','Survived':'Выжили'})
a.columns=['Исход','Количество пациентов']
a
| Исход | Количество пациентов | |
|---|---|---|
| 0 | Умерли | 14 |
| 1 | Выжили | 99 |
# Группа 1: умерли
df[(df['OUTCOME']=='Died')&(df['GT']==1)][target_columns[2:-1]].describe().T
| count | mean | std | min | 25% | 50% | 75% | max | |
|---|---|---|---|---|---|---|---|---|
| Возраст | 87.0 | 7.028736 | 3.970190 | 0.250000 | 4.833333 | 6.666667 | 9.000000 | 17.000000 |
| GT | 87.0 | 1.000000 | 0.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 |
| САД | 87.0 | 99.160920 | 21.265691 | 45.000000 | 82.500000 | 102.000000 | 114.000000 | 165.000000 |
| ДАД | 87.0 | 57.034483 | 16.770994 | 17.000000 | 45.000000 | 58.000000 | 70.000000 | 93.000000 |
| СрАД | 87.0 | 71.076628 | 17.668692 | 26.333333 | 59.666667 | 71.666667 | 84.833333 | 115.000000 |
| ЧСС | 87.0 | 104.321839 | 28.342381 | 41.000000 | 87.000000 | 107.000000 | 121.500000 | 186.000000 |
| ИА | 87.0 | 1.095675 | 0.420074 | 0.464000 | 0.858396 | 1.000000 | 1.192099 | 3.100000 |
| SpO2 | 87.0 | 97.091954 | 4.105108 | 70.000000 | 97.500000 | 98.000000 | 99.000000 | 100.000000 |
| Масса тела | 87.0 | 27.137931 | 13.913497 | 6.000000 | 20.000000 | 25.000000 | 30.000000 | 75.000000 |
| Cl- | 87.0 | 122.959288 | 18.820388 | 95.000000 | 108.744756 | 120.000000 | 139.000000 | 193.000000 |
| Лактат | 87.0 | 2.839655 | 4.198028 | 0.000000 | 0.000000 | 1.200000 | 4.100000 | 20.000000 |
| Амилаза | 87.0 | 29.551724 | 118.743495 | 0.000000 | 0.000000 | 0.000000 | 0.000000 | 892.000000 |
| АЛТ | 87.0 | 152.105747 | 334.063887 | 0.000000 | 45.000000 | 71.000000 | 113.000000 | 2865.000000 |
| АСТ | 87.0 | 221.151724 | 335.945268 | 0.000000 | 92.400000 | 138.500000 | 183.000000 | 2458.300000 |
| АЧТВ | 87.0 | 18.912644 | 24.300827 | 0.000000 | 0.000000 | 0.000000 | 36.500000 | 120.000000 |
| Инфузия, % от N | 87.0 | 124.278304 | 52.851206 | 11.952941 | 88.852877 | 109.294118 | 157.852930 | 300.176471 |
| КИ | 87.0 | 31.955172 | 109.587214 | 0.000000 | 5.000000 | 7.500000 | 18.000000 | 956.600000 |
| Площадь тела | 87.0 | 1.038966 | 0.323049 | 0.430000 | 0.970000 | 1.090000 | 1.330000 | 1.450000 |
| Диурез, мл/кг | 87.0 | 59.325500 | 38.658511 | 0.000000 | 35.916667 | 50.000000 | 77.083333 | 179.500000 |
# Группа 2: выжили
df[(df['OUTCOME']=='Survived')&(df['GT']==1)][target_columns[2:-1]].describe().T
| count | mean | std | min | 25% | 50% | 75% | max | |
|---|---|---|---|---|---|---|---|---|
| Возраст | 362.0 | 9.588113 | 5.599449 | 0.666667 | 4.000000 | 11.000000 | 14.000000 | 17.000000 |
| GT | 362.0 | 1.000000 | 0.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 |
| САД | 362.0 | 110.812155 | 15.094827 | 50.000000 | 100.000000 | 110.000000 | 120.000000 | 163.000000 |
| ДАД | 362.0 | 63.944751 | 12.661248 | 20.000000 | 55.000000 | 64.000000 | 70.000000 | 100.000000 |
| СрАД | 362.0 | 79.567219 | 12.645701 | 30.000000 | 71.416667 | 79.333333 | 87.333333 | 117.666667 |
| ЧСС | 362.0 | 106.569061 | 24.055843 | 52.000000 | 90.000000 | 106.000000 | 120.000000 | 176.000000 |
| ИА | 362.0 | 0.991421 | 0.320478 | 0.412903 | 0.782143 | 0.936364 | 1.116447 | 2.800000 |
| SpO2 | 362.0 | 98.345304 | 4.565266 | 26.000000 | 98.000000 | 99.000000 | 100.000000 | 100.000000 |
| Масса тела | 362.0 | 39.592541 | 23.571319 | 7.500000 | 17.000000 | 35.000000 | 60.000000 | 100.000000 |
| Cl- | 362.0 | 110.585869 | 10.139686 | 31.000000 | 105.000000 | 108.872378 | 115.000000 | 153.000000 |
| Лактат | 362.0 | 1.633287 | 1.346455 | 0.000000 | 0.900000 | 1.400000 | 2.337500 | 9.000000 |
| Амилаза | 362.0 | 137.386436 | 234.684048 | 0.000000 | 0.000000 | 55.450000 | 156.125000 | 1940.000000 |
| АЛТ | 362.0 | 85.976547 | 167.227641 | 0.000000 | 20.000000 | 39.200000 | 85.887500 | 1885.200000 |
| АСТ | 362.0 | 120.489365 | 227.273124 | 0.000000 | 32.487500 | 55.000000 | 116.000000 | 1958.500000 |
| АЧТВ | 362.0 | 22.750414 | 15.995155 | 0.000000 | 0.000000 | 28.000000 | 33.000000 | 90.000000 |
| Инфузия, % от N | 362.0 | 119.647799 | 64.654637 | 0.000000 | 81.581605 | 108.125000 | 139.705882 | 564.146341 |
| КИ | 362.0 | 7.214696 | 19.695994 | 0.000000 | 0.000000 | 2.800000 | 5.000000 | 199.200000 |
| Площадь тела | 362.0 | 0.924641 | 0.320415 | 0.250000 | 0.610000 | 1.030000 | 1.210000 | 1.390000 |
| Диурез, мл/кг | 362.0 | 54.808690 | 38.617765 | 1.571429 | 29.244505 | 46.619048 | 70.743590 | 280.000000 |
# сравнение средних
a = pd.DataFrame(df[(df['OUTCOME']=='Died')&(df['GT']==1)][target_columns[2:-1]].drop('GT',axis=1).mean()).rename(columns = {0:'Группа 1: умерли'})
a_ = []
for i in target_columns[2:-1]:
if i != 'GT':
a_.append(df[(df['OUTCOME']=='Survived')&(df['GT']==1)][i].mean())
a['Группа 2: выжили'] = a_
a
| Группа 1: умерли | Группа 2: выжили | |
|---|---|---|
| Возраст | 7.028736 | 9.588113 |
| САД | 99.160920 | 110.812155 |
| ДАД | 57.034483 | 63.944751 |
| СрАД | 71.076628 | 79.567219 |
| ЧСС | 104.321839 | 106.569061 |
| ИА | 1.095675 | 0.991421 |
| SpO2 | 97.091954 | 98.345304 |
| Масса тела | 27.137931 | 39.592541 |
| Cl- | 122.959288 | 110.585869 |
| Лактат | 2.839655 | 1.633287 |
| Амилаза | 29.551724 | 137.386436 |
| АЛТ | 152.105747 | 85.976547 |
| АСТ | 221.151724 | 120.489365 |
| АЧТВ | 18.912644 | 22.750414 |
| Инфузия, % от N | 124.278304 | 119.647799 |
| КИ | 31.955172 | 7.214696 |
| Площадь тела | 1.038966 | 0.924641 |
| Диурез, мл/кг | 59.325500 | 54.808690 |
# количество умерших (0) и выживших (1) пациентов, получавших ГТ
fig, ax = plt.subplots()
sns.barplot(data = [[i] for i in df[df['GT']==1].groupby('ID')['OUTCOME'].first().value_counts()[::-1]]);
ax.set_xticklabels(['Умерли', 'Выжили'])
plt.show()
Проверка наличия значимой разницы между группами выживших и умерших пациентов, получавших ГТ
# т.к. выборки разного размера, в одной из них - мало данных, распределение не нормальное (графики ниже), воспользуемся тестом Краскела-Уоллиса
for k,i in enumerate(target_columns[2:-1]):
group0 = df[(df['OUTCOME']=='Survived')&(df['GT']==1)][i]
group1 = df[(df['OUTCOME']=='Died')&(df['GT']==1)][i]
alpha = 0.05
try:
test_value, p = stats.kruskal(group0,group1)
if alpha<p:
append_list.append(['Получали ГТ',i,'значимость различия не доказана',p,alpha,group0.median(),group0.quantile(0.25),group0.quantile(0.75),\
group1.median(),group1.quantile(0.25),group1.quantile(0.75)])
else:
append_list.append(['Получали ГТ',i,'обнаружены значимые различия',p,alpha,group0.median(),group0.quantile(0.25),group0.quantile(0.75),\
group1.median(),group1.quantile(0.25),group1.quantile(0.75)])
except Exception:
pass
gt_users = df.loc[df['GT']==1,'ID'].unique()
a = df[(df['GT']==0)&(~df.ID.isin(gt_users))].groupby('OUTCOME',as_index=False)['ID'].nunique().replace({'Died':'Умерли','Survived':'Выжили'})
a.columns=['Исход','Количество пациентов']
a
| Исход | Количество пациентов | |
|---|---|---|
| 0 | Умерли | 5 |
| 1 | Выжили | 85 |
# количество умерших (0) и выживших (1) пациентов, не получавших ГТ
fig, ax = plt.subplots()
sns.barplot(data = [[i] for i in df[(df['GT']==0)&(~df.ID.isin(gt_users))].groupby('ID')['OUTCOME'].first().value_counts()[::-1]]);
ax.set_xticklabels(['Умерли', 'Выжили'])
plt.show()
# Группа 1: умерли
df[(df['OUTCOME']=='Died')&(df['GT']==0)&(~df.ID.isin(gt_users))][target_columns[2:-1]].describe().T
| count | mean | std | min | 25% | 50% | 75% | max | |
|---|---|---|---|---|---|---|---|---|
| Возраст | 28.0 | 10.000000 | 5.429685 | 1.000000 | 9.250000 | 12.000000 | 13.000000 | 17.000000 |
| GT | 28.0 | 0.000000 | 0.000000 | 0.000000 | 0.000000 | 0.000000 | 0.000000 | 0.000000 |
| САД | 28.0 | 98.035714 | 22.280172 | 50.000000 | 85.000000 | 93.000000 | 111.500000 | 142.000000 |
| ДАД | 28.0 | 55.250000 | 16.249501 | 26.000000 | 44.500000 | 52.000000 | 62.000000 | 96.000000 |
| СрАД | 28.0 | 69.511905 | 17.695058 | 34.000000 | 58.000000 | 66.666667 | 77.666667 | 110.666667 |
| ЧСС | 28.0 | 115.964286 | 22.701741 | 64.000000 | 101.500000 | 117.000000 | 125.750000 | 178.000000 |
| ИА | 28.0 | 1.236859 | 0.355690 | 0.731707 | 0.981818 | 1.183473 | 1.361928 | 2.200000 |
| SpO2 | 28.0 | 97.071429 | 5.401842 | 75.000000 | 98.000000 | 99.000000 | 99.250000 | 100.000000 |
| Масса тела | 28.0 | 40.000000 | 17.747196 | 12.000000 | 33.000000 | 40.000000 | 56.000000 | 56.000000 |
| Cl- | 28.0 | 121.229421 | 13.127313 | 100.000000 | 108.744756 | 116.000000 | 132.000000 | 141.000000 |
| Лактат | 28.0 | 1.942857 | 3.307839 | 0.000000 | 0.000000 | 1.500000 | 2.725000 | 17.000000 |
| Амилаза | 28.0 | 43.341071 | 85.142133 | 0.000000 | 0.000000 | 0.000000 | 64.100000 | 389.800000 |
| АЛТ | 28.0 | 72.041071 | 52.059606 | 15.900000 | 22.375000 | 71.000000 | 95.000000 | 232.800000 |
| АСТ | 28.0 | 126.407143 | 154.724158 | 0.000000 | 31.650000 | 85.000000 | 189.000000 | 798.600000 |
| АЧТВ | 28.0 | 26.885714 | 19.680461 | 0.000000 | 0.000000 | 29.000000 | 40.800000 | 58.000000 |
| Инфузия, % от N | 28.0 | 123.284226 | 53.830825 | 0.000000 | 94.312500 | 137.041667 | 160.208333 | 190.833333 |
| КИ | 28.0 | 31.714286 | 59.371309 | 0.000000 | 10.000000 | 14.000000 | 30.000000 | 320.000000 |
| Площадь тела | 28.0 | 0.703571 | 0.188566 | 0.410000 | 0.560000 | 0.730000 | 0.850000 | 1.030000 |
| Диурез, мл/кг | 28.0 | 49.397534 | 36.884901 | 0.000000 | 28.928571 | 42.928571 | 64.020833 | 140.000000 |
# Группа 2: выжили
df[(df['OUTCOME']=='Survived')&(df['GT']==0)&(~df.ID.isin(gt_users))][target_columns[2:-1]].describe().T
| count | mean | std | min | 25% | 50% | 75% | max | |
|---|---|---|---|---|---|---|---|---|
| Возраст | 414.0 | 9.502262 | 5.406316 | 0.250000 | 4.000000 | 11.000000 | 15.000000 | 18.000000 |
| GT | 414.0 | 0.000000 | 0.000000 | 0.000000 | 0.000000 | 0.000000 | 0.000000 | 0.000000 |
| САД | 414.0 | 111.618357 | 14.156998 | 70.000000 | 102.000000 | 110.000000 | 120.000000 | 170.000000 |
| ДАД | 414.0 | 64.903382 | 10.528427 | 30.000000 | 60.000000 | 65.000000 | 70.000000 | 119.000000 |
| СрАД | 414.0 | 80.475040 | 10.669506 | 43.333333 | 73.333333 | 80.000000 | 86.666667 | 117.333333 |
| ЧСС | 414.0 | 104.722222 | 23.393624 | 40.000000 | 90.000000 | 105.000000 | 120.000000 | 180.000000 |
| ИА | 414.0 | 0.960196 | 0.277759 | 0.381356 | 0.765913 | 0.973903 | 1.110561 | 2.250000 |
| SpO2 | 414.0 | 98.586957 | 2.255136 | 70.000000 | 98.000000 | 99.000000 | 100.000000 | 100.000000 |
| Масса тела | 414.0 | 40.176329 | 23.670259 | 6.000000 | 16.500000 | 37.000000 | 60.000000 | 103.000000 |
| Cl- | 414.0 | 111.088820 | 14.011761 | 85.000000 | 104.000000 | 108.744756 | 113.000000 | 191.000000 |
| Лактат | 414.0 | 1.258430 | 1.107364 | 0.000000 | 0.525000 | 1.100000 | 1.700000 | 7.800000 |
| Амилаза | 414.0 | 71.021377 | 152.711444 | 0.000000 | 0.000000 | 40.000000 | 79.850000 | 2520.000000 |
| АЛТ | 414.0 | 93.914614 | 177.911547 | 0.000000 | 18.450000 | 34.750000 | 90.975000 | 1384.000000 |
| АСТ | 414.0 | 111.129396 | 233.312475 | 0.000000 | 28.900000 | 50.900000 | 91.975000 | 2242.000000 |
| АЧТВ | 414.0 | 24.461111 | 17.719111 | 0.000000 | 0.000000 | 30.000000 | 36.775000 | 67.000000 |
| Инфузия, % от N | 414.0 | 118.633597 | 49.680709 | 0.000000 | 92.823933 | 111.458333 | 140.364583 | 295.701754 |
| КИ | 414.0 | 4.771618 | 14.754241 | 0.000000 | 0.000000 | 0.000000 | 5.000000 | 150.000000 |
| Площадь тела | 414.0 | 0.980204 | 0.346188 | 0.290800 | 0.730000 | 1.090000 | 1.330000 | 1.390000 |
| Диурез, мл/кг | 414.0 | 56.622304 | 33.911779 | 0.000000 | 32.115385 | 48.944444 | 72.727273 | 229.333333 |
# сравнение средних
a = pd.DataFrame(df[(df['OUTCOME']=='Died')&(df['GT']==0)&(~df.ID.isin(gt_users))][target_columns[2:-1]].drop('GT',axis=1).mean()).rename(columns = {0:'Группа 1: умерли'})
a_ = []
for i in target_columns[2:-1]:
if i != 'GT':
a_.append(df[(df['OUTCOME']=='Survived')&(df['GT']==0)&(~df.ID.isin(gt_users))][i].mean())
a['Группа 2: выжили'] = a_
a
| Группа 1: умерли | Группа 2: выжили | |
|---|---|---|
| Возраст | 10.000000 | 9.502262 |
| САД | 98.035714 | 111.618357 |
| ДАД | 55.250000 | 64.903382 |
| СрАД | 69.511905 | 80.475040 |
| ЧСС | 115.964286 | 104.722222 |
| ИА | 1.236859 | 0.960196 |
| SpO2 | 97.071429 | 98.586957 |
| Масса тела | 40.000000 | 40.176329 |
| Cl- | 121.229421 | 111.088820 |
| Лактат | 1.942857 | 1.258430 |
| Амилаза | 43.341071 | 71.021377 |
| АЛТ | 72.041071 | 93.914614 |
| АСТ | 126.407143 | 111.129396 |
| АЧТВ | 26.885714 | 24.461111 |
| Инфузия, % от N | 123.284226 | 118.633597 |
| КИ | 31.714286 | 4.771618 |
| Площадь тела | 0.703571 | 0.980204 |
| Диурез, мл/кг | 49.397534 | 56.622304 |
Проверка наличия значимой разницы между группами выживших и умерших пациентов, неполучавших ГТ
# т.к. выборки разного размера, в одной из них - мало данных, распределение не нормальное, воспользуемся тестом Краскела-Уоллиса
for k,i in enumerate(target_columns[2:-1]):
group0 = df[(df['OUTCOME']=='Survived')&(df['GT']==0)][i]
group1 = df[(df['OUTCOME']=='Died')&(df['GT']==0)][i]
alpha = 0.05
try:
test_value, p = stats.kruskal(group0,group1)
if alpha<p:
append_list.append(['Не получали ГТ',i,'значимость различия не доказана',p,alpha,group0.median(),group0.quantile(0.25),group0.quantile(0.75),\
group1.median(),group1.quantile(0.25),group1.quantile(0.75)])
else:
append_list.append(['Не получали ГТ',i,'обнаружены значимые различия',p,alpha,group0.median(),group0.quantile(0.25),group0.quantile(0.75),\
group1.median(),group1.quantile(0.25),group1.quantile(0.75)])
except Exception:
pass
1
# т.к. выборки разного размера, в одной из них - мало данных, распределение не нормальное, воспользуемся тестом Краскела-Уоллиса
for k,i in enumerate(target_columns[2:-1]):
group0 = df[(df['OUTCOME']=='Survived')&(df.Day==1)][i]
group1 = df[(df['OUTCOME']=='Died')&(df.Day==1)][i]
alpha = 0.05
test_value, p = stats.kruskal(group0,group1)
if alpha<p:
append_list.append(['Все пациенты, 1й день',i,'значимость различия не доказана',p,alpha,group0.median(),group0.quantile(0.25),group0.quantile(0.75),\
group1.median(),group1.quantile(0.25),group1.quantile(0.75)])
else:
append_list.append(['Все пациенты, 1й день',i,'обнаружены значимые различия',p,alpha,group0.median(),group0.quantile(0.25),group0.quantile(0.75),\
group1.median(),group1.quantile(0.25),group1.quantile(0.75)])
print(f'Выживших: {group0.shape[0]}, умерших: {group1.shape[0]}')
Выживших: 184, умерших: 19
a0 = df[(df['OUTCOME']=='Survived')&(df.Day==1)]
df[(df['OUTCOME']=='Survived')&(df.Day==1)].describe().T
| count | mean | std | min | 25% | 50% | 75% | max | |
|---|---|---|---|---|---|---|---|---|
| ID | 184.0 | 105.146739 | 63.918025 | 1.000000 | 47.750000 | 107.500000 | 157.500000 | 216.000000 |
| Day | 184.0 | 1.000000 | 0.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 |
| Возраст | 184.0 | 8.988207 | 5.359763 | 0.250000 | 4.000000 | 8.500000 | 14.000000 | 18.000000 |
| GT | 184.0 | 0.407609 | 0.492730 | 0.000000 | 0.000000 | 0.000000 | 1.000000 | 1.000000 |
| САД | 184.0 | 107.000000 | 18.267592 | 50.000000 | 94.750000 | 110.000000 | 120.000000 | 159.000000 |
| ДАД | 184.0 | 63.179348 | 13.639600 | 20.000000 | 55.000000 | 60.000000 | 70.000000 | 119.000000 |
| СрАД | 184.0 | 77.786232 | 14.272743 | 30.000000 | 69.083333 | 78.000000 | 86.666667 | 117.333333 |
| ЧСС | 184.0 | 110.809783 | 22.699551 | 40.000000 | 94.000000 | 110.000000 | 124.000000 | 172.000000 |
| ИА | 184.0 | 1.081798 | 0.365621 | 0.407692 | 0.828591 | 1.038462 | 1.224465 | 2.800000 |
| SpO2 | 184.0 | 98.173913 | 6.102241 | 26.000000 | 98.000000 | 100.000000 | 100.000000 | 100.000000 |
| Масса тела | 184.0 | 36.005435 | 22.024266 | 6.000000 | 16.750000 | 30.000000 | 51.000000 | 103.000000 |
| Cl- | 184.0 | 108.681024 | 9.935419 | 31.000000 | 104.000000 | 108.744756 | 111.000000 | 148.000000 |
| Лактат | 184.0 | 1.627717 | 2.413995 | 0.000000 | 0.000000 | 1.100000 | 2.600000 | 25.000000 |
| Амилаза | 184.0 | 36.880978 | 65.499462 | 0.000000 | 0.000000 | 13.800000 | 49.000000 | 533.500000 |
| АЛТ | 184.0 | 115.638859 | 246.634132 | 0.000000 | 13.300000 | 30.000000 | 95.275000 | 1885.200000 |
| АСТ | 184.0 | 172.759076 | 351.743698 | 0.000000 | 0.352500 | 55.400000 | 139.450000 | 2242.000000 |
| АЧТВ | 184.0 | 16.610870 | 17.463210 | 0.000000 | 0.000000 | 23.000000 | 30.500000 | 90.000000 |
| Инфузия, % от N | 184.0 | 92.796612 | 62.792192 | 0.000000 | 54.192073 | 79.056962 | 113.939951 | 353.009259 |
| КИ | 184.0 | 3.619076 | 12.877508 | 0.000000 | 0.000000 | 0.000000 | 2.500000 | 130.000000 |
| Площадь тела | 184.0 | 0.900920 | 0.321340 | 0.250000 | 0.610000 | 0.850000 | 1.210000 | 1.390000 |
| Диурез, мл/кг | 184.0 | 39.406846 | 32.706270 | 0.000000 | 14.305556 | 30.740260 | 56.730769 | 205.384615 |
b0 = df[(df['OUTCOME']=='Died')&(df.Day==1)]
df[(df['OUTCOME']=='Died')&(df.Day==1)].describe().T
| count | mean | std | min | 25% | 50% | 75% | max | |
|---|---|---|---|---|---|---|---|---|
| ID | 19.0 | 94.263158 | 35.529084 | 30.000000 | 78.500000 | 91.000000 | 95.500000 | 205.000000 |
| Day | 19.0 | 1.000000 | 0.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 |
| Возраст | 19.0 | 9.342105 | 5.659097 | 0.250000 | 5.125000 | 9.000000 | 14.000000 | 17.000000 |
| GT | 19.0 | 0.684211 | 0.477567 | 0.000000 | 0.000000 | 1.000000 | 1.000000 | 1.000000 |
| САД | 19.0 | 93.526316 | 24.541050 | 45.000000 | 72.500000 | 99.000000 | 111.000000 | 130.000000 |
| ДАД | 19.0 | 51.631579 | 18.294536 | 17.000000 | 40.000000 | 53.000000 | 65.000000 | 81.000000 |
| СрАД | 19.0 | 65.596491 | 19.754849 | 26.333333 | 49.166667 | 68.333333 | 80.166667 | 95.666667 |
| ЧСС | 19.0 | 108.421053 | 30.229338 | 54.000000 | 88.000000 | 110.000000 | 133.500000 | 160.000000 |
| ИА | 19.0 | 1.220780 | 0.421409 | 0.464000 | 0.970702 | 1.173333 | 1.443137 | 2.285714 |
| SpO2 | 19.0 | 94.473684 | 8.585313 | 70.000000 | 94.500000 | 98.000000 | 99.000000 | 100.000000 |
| Масса тела | 19.0 | 35.631579 | 19.723676 | 6.000000 | 20.000000 | 30.000000 | 50.000000 | 75.000000 |
| Cl- | 19.0 | 112.959698 | 14.083660 | 99.000000 | 104.500000 | 108.744756 | 118.000000 | 158.000000 |
| Лактат | 19.0 | 3.684211 | 5.908681 | 0.000000 | 0.000000 | 0.000000 | 5.050000 | 17.000000 |
| Амилаза | 19.0 | 19.005263 | 38.641665 | 0.000000 | 0.000000 | 0.000000 | 17.550000 | 137.000000 |
| АЛТ | 19.0 | 288.973684 | 686.046097 | 0.000000 | 39.500000 | 62.000000 | 156.000000 | 2865.000000 |
| АСТ | 19.0 | 341.663158 | 647.200154 | 0.000000 | 42.000000 | 110.000000 | 215.000000 | 2458.300000 |
| АЧТВ | 19.0 | 18.631579 | 23.497542 | 0.000000 | 0.000000 | 0.000000 | 31.500000 | 80.000000 |
| Инфузия, % от N | 19.0 | 127.466044 | 81.327040 | 0.000000 | 76.317203 | 112.291667 | 177.038684 | 300.176471 |
| КИ | 19.0 | 94.110526 | 228.739636 | 0.000000 | 0.000000 | 5.000000 | 21.750000 | 956.600000 |
| Площадь тела | 19.0 | 0.994211 | 0.357496 | 0.410000 | 0.670000 | 1.090000 | 1.300000 | 1.450000 |
| Диурез, мл/кг | 19.0 | 48.114514 | 41.013025 | 0.000000 | 19.583333 | 36.607143 | 70.465116 | 140.000000 |
# сравнение средних
a = pd.DataFrame(b0[(b0['OUTCOME']=='Died')&(b0['Day']==1)][target_columns[2:-1]].drop('GT',axis=1).mean()).rename(columns = {0:'Группа 1: умерли'})
a_ = []
for i in target_columns[2:-1]:
if i != 'GT':
a_.append(a0[(a0['OUTCOME']=='Survived')&(a0['Day']==1)][i].mean())
a['Группа 2: выжили'] = a_
a
| Группа 1: умерли | Группа 2: выжили | |
|---|---|---|
| Возраст | 9.342105 | 8.988207 |
| САД | 93.526316 | 107.000000 |
| ДАД | 51.631579 | 63.179348 |
| СрАД | 65.596491 | 77.786232 |
| ЧСС | 108.421053 | 110.809783 |
| ИА | 1.220780 | 1.081798 |
| SpO2 | 94.473684 | 98.173913 |
| Масса тела | 35.631579 | 36.005435 |
| Cl- | 112.959698 | 108.681024 |
| Лактат | 3.684211 | 1.627717 |
| Амилаза | 19.005263 | 36.880978 |
| АЛТ | 288.973684 | 115.638859 |
| АСТ | 341.663158 | 172.759076 |
| АЧТВ | 18.631579 | 16.610870 |
| Инфузия, % от N | 127.466044 | 92.796612 |
| КИ | 94.110526 | 3.619076 |
| Площадь тела | 0.994211 | 0.900920 |
| Диурез, мл/кг | 48.114514 | 39.406846 |
for i in a0.columns[2:-1]:
if i!='GT':
print(i)
sns.boxplot(data = [b0[i],a0[i]]);
plt.show()
Возраст
САД
ДАД
СрАД
ЧСС
ИА
SpO2
Масса тела
Cl-
Лактат
Амилаза
АЛТ
АСТ
АЧТВ
Инфузия, % от N
КИ
Площадь тела
Диурез, мл/кг
2
# т.к. выборки разного размера, в одной из них - мало данных, распределение не нормальное, воспользуемся тестом Краскела-Уоллиса
for k,i in enumerate(target_columns[2:-1]):
group0 = df[(df['OUTCOME']=='Survived')&(df.Day==1)&(df.GT==1)][i]
group1 = df[(df['OUTCOME']=='Died')&(df.Day==1)&(df.GT==1)][i]
alpha = 0.05
try:
test_value, p = stats.kruskal(group0,group1)
if alpha<p:
append_list.append(['Получали ГТ, 1й день',i,'значимость различия не доказана',p,alpha,group0.median(),group0.quantile(0.25),group0.quantile(0.75),\
group1.median(),group1.quantile(0.25),group1.quantile(0.75)])
else:
append_list.append(['Получали ГТ, 1й день',i,'обнаружены значимые различия',p,alpha,group0.median(),group0.quantile(0.25),group0.quantile(0.75),\
group1.median(),group1.quantile(0.25),group1.quantile(0.75)])
except Exception:
pass
print(f'Выживших, получавших ГТ: {group0.shape[0]}, умерших, получавших ГТ: {group1.shape[0]}')
Выживших, получавших ГТ: 75, умерших, получавших ГТ: 13
a1 = df[(df['OUTCOME']=='Survived')&(df.Day==1)&(df.GT==1)]
a1.describe().T
| count | mean | std | min | 25% | 50% | 75% | max | |
|---|---|---|---|---|---|---|---|---|
| ID | 75.0 | 108.093333 | 67.853812 | 3.000000 | 39.500000 | 116.000000 | 174.500000 | 215.000000 |
| Day | 75.0 | 1.000000 | 0.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 |
| Возраст | 75.0 | 8.862222 | 5.144140 | 0.666667 | 4.000000 | 9.000000 | 13.000000 | 17.000000 |
| GT | 75.0 | 1.000000 | 0.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 |
| САД | 75.0 | 107.160000 | 19.811299 | 50.000000 | 95.000000 | 108.000000 | 119.000000 | 155.000000 |
| ДАД | 75.0 | 62.013333 | 14.497431 | 20.000000 | 51.000000 | 62.000000 | 70.000000 | 100.000000 |
| СрАД | 75.0 | 77.062222 | 15.414366 | 30.000000 | 68.000000 | 78.000000 | 87.500000 | 113.333333 |
| ЧСС | 75.0 | 113.226667 | 22.916165 | 62.000000 | 98.000000 | 115.000000 | 122.000000 | 172.000000 |
| ИА | 75.0 | 1.118873 | 0.420857 | 0.412903 | 0.854497 | 1.076190 | 1.267943 | 2.800000 |
| SpO2 | 75.0 | 97.733333 | 8.679478 | 26.000000 | 98.000000 | 100.000000 | 100.000000 | 100.000000 |
| Масса тела | 75.0 | 36.473333 | 22.394632 | 8.500000 | 17.500000 | 30.000000 | 52.500000 | 100.000000 |
| Cl- | 75.0 | 107.395758 | 11.165310 | 31.000000 | 105.000000 | 108.000000 | 109.900000 | 140.000000 |
| Лактат | 75.0 | 1.688000 | 1.866921 | 0.000000 | 0.000000 | 1.400000 | 2.800000 | 9.000000 |
| Амилаза | 75.0 | 37.898667 | 69.860344 | 0.000000 | 0.000000 | 0.000000 | 46.500000 | 329.200000 |
| АЛТ | 75.0 | 106.433333 | 253.935550 | 0.000000 | 15.150000 | 27.400000 | 95.450000 | 1885.200000 |
| АСТ | 75.0 | 179.136000 | 337.656883 | 0.000000 | 26.000000 | 57.000000 | 179.450000 | 1958.500000 |
| АЧТВ | 75.0 | 16.122667 | 18.785558 | 0.000000 | 0.000000 | 0.000000 | 29.400000 | 90.000000 |
| Инфузия, % от N | 75.0 | 88.578770 | 62.288725 | 0.000000 | 53.624429 | 75.583333 | 112.952489 | 353.009259 |
| КИ | 75.0 | 3.668800 | 10.734883 | 0.000000 | 0.000000 | 0.000000 | 3.850000 | 80.000000 |
| Площадь тела | 75.0 | 0.909867 | 0.300739 | 0.250000 | 0.610000 | 0.970000 | 1.150000 | 1.390000 |
| Диурез, мл/кг | 75.0 | 40.812975 | 32.523385 | 1.571429 | 13.039683 | 32.916667 | 62.019231 | 179.166667 |
b1 = df[(df['OUTCOME']=='Died')&(df.Day==1)&(df.GT==1)]
b1.describe().T
| count | mean | std | min | 25% | 50% | 75% | max | |
|---|---|---|---|---|---|---|---|---|
| ID | 13.0 | 96.461538 | 40.879121 | 30.000000 | 80.000000 | 91.000000 | 96.000000 | 205.000000 |
| Day | 13.0 | 1.000000 | 0.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 |
| Возраст | 13.0 | 8.423077 | 5.449416 | 0.250000 | 5.000000 | 6.666667 | 14.000000 | 17.000000 |
| GT | 13.0 | 1.000000 | 0.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 |
| САД | 13.0 | 91.153846 | 26.635960 | 45.000000 | 70.000000 | 90.000000 | 110.000000 | 130.000000 |
| ДАД | 13.0 | 48.615385 | 18.768495 | 17.000000 | 30.000000 | 52.000000 | 65.000000 | 78.000000 |
| СрАД | 13.0 | 62.794872 | 20.595099 | 26.333333 | 46.666667 | 68.333333 | 80.000000 | 93.000000 |
| ЧСС | 13.0 | 101.307692 | 31.784128 | 54.000000 | 80.000000 | 100.000000 | 120.000000 | 160.000000 |
| ИА | 13.0 | 1.181043 | 0.447806 | 0.464000 | 0.950495 | 1.173333 | 1.333333 | 2.285714 |
| SpO2 | 13.0 | 94.615385 | 8.539501 | 70.000000 | 93.000000 | 99.000000 | 99.000000 | 100.000000 |
| Масса тела | 13.0 | 34.076923 | 21.355958 | 6.000000 | 20.000000 | 25.000000 | 50.000000 | 75.000000 |
| Cl- | 13.0 | 112.806885 | 15.274514 | 99.000000 | 104.000000 | 108.744756 | 116.000000 | 158.000000 |
| Лактат | 13.0 | 3.500000 | 5.772204 | 0.000000 | 0.000000 | 0.000000 | 4.100000 | 17.000000 |
| Амилаза | 13.0 | 14.615385 | 39.582274 | 0.000000 | 0.000000 | 0.000000 | 0.000000 | 137.000000 |
| АЛТ | 13.0 | 361.407692 | 828.019596 | 0.000000 | 38.000000 | 47.000000 | 66.000000 | 2865.000000 |
| АСТ | 13.0 | 380.953846 | 767.014185 | 0.000000 | 45.000000 | 94.000000 | 120.700000 | 2458.300000 |
| АЧТВ | 13.0 | 18.692308 | 24.526804 | 0.000000 | 0.000000 | 0.000000 | 32.000000 | 80.000000 |
| Инфузия, % от N | 13.0 | 144.509492 | 80.877468 | 58.823529 | 89.164087 | 112.291667 | 190.833333 | 300.176471 |
| КИ | 13.0 | 109.353846 | 266.338934 | 0.000000 | 0.000000 | 5.000000 | 16.000000 | 956.600000 |
| Площадь тела | 13.0 | 1.140769 | 0.305790 | 0.490000 | 1.090000 | 1.210000 | 1.330000 | 1.450000 |
| Диурез, мл/кг | 13.0 | 47.515140 | 35.791409 | 0.000000 | 20.000000 | 43.000000 | 70.000000 | 132.608696 |
# сравнение средних
a = pd.DataFrame(b1[(b1['OUTCOME']=='Died')&(b1['GT']==1)][target_columns[2:-1]].drop('GT',axis=1).mean()).rename(columns = {0:'Группа 1: умерли'})
a_ = []
for i in target_columns[2:-1]:
if i != 'GT':
a_.append(a1[(a1['OUTCOME']=='Survived')&(a1['GT']==1)][i].mean())
a['Группа 2: выжили'] = a_
a
| Группа 1: умерли | Группа 2: выжили | |
|---|---|---|
| Возраст | 8.423077 | 8.862222 |
| САД | 91.153846 | 107.160000 |
| ДАД | 48.615385 | 62.013333 |
| СрАД | 62.794872 | 77.062222 |
| ЧСС | 101.307692 | 113.226667 |
| ИА | 1.181043 | 1.118873 |
| SpO2 | 94.615385 | 97.733333 |
| Масса тела | 34.076923 | 36.473333 |
| Cl- | 112.806885 | 107.395758 |
| Лактат | 3.500000 | 1.688000 |
| Амилаза | 14.615385 | 37.898667 |
| АЛТ | 361.407692 | 106.433333 |
| АСТ | 380.953846 | 179.136000 |
| АЧТВ | 18.692308 | 16.122667 |
| Инфузия, % от N | 144.509492 | 88.578770 |
| КИ | 109.353846 | 3.668800 |
| Площадь тела | 1.140769 | 0.909867 |
| Диурез, мл/кг | 47.515140 | 40.812975 |
for i in a1.columns[2:-1]:
if i!='GT':
print(i)
sns.boxplot(data = [b1[i],a1[i]]);
plt.show()
Возраст
САД
ДАД
СрАД
ЧСС
ИА
SpO2
Масса тела
Cl-
Лактат
Амилаза
АЛТ
АСТ
АЧТВ
Инфузия, % от N
КИ
Площадь тела
Диурез, мл/кг
3
# т.к. выборки разного размера, в одной из них - мало данных, распределение не нормальное, воспользуемся тестом Краскела-Уоллиса
for k,i in enumerate(target_columns[2:-1]):
group0 = df[(df['OUTCOME']=='Survived')&(df.Day==1)&(df.GT==0)][i]
group1 = df[(df['OUTCOME']=='Died')&(df.Day==1)&(df.GT==0)][i]
alpha = 0.05
try:
test_value, p = stats.kruskal(group0,group1)
if alpha<p:
append_list.append(['Не получали ГТ, 1й день',i,'значимость различия не доказана',p,alpha,group0.median(),group0.quantile(0.25),group0.quantile(0.75),\
group1.median(),group1.quantile(0.25),group1.quantile(0.75)])
else:
append_list.append(['Не получали ГТ, 1й день',i,'обнаружены значимые различия',p,alpha,group0.median(),group0.quantile(0.25),group0.quantile(0.75),\
group1.median(),group1.quantile(0.25),group1.quantile(0.75)])
except Exception:
pass
print(f'Выживших, не получавших ГТ: {group0.shape[0]}; умерших, не получавших ГТ: {group1.shape[0]}')
Выживших, не получавших ГТ: 109; умерших, не получавших ГТ: 6
a2 = df[(df['OUTCOME']=='Survived')&(df.Day==1)&(df.GT==0)]
a2.describe().T
| count | mean | std | min | 25% | 50% | 75% | max | |
|---|---|---|---|---|---|---|---|---|
| ID | 109.0 | 103.119266 | 61.300976 | 1.000000 | 51.000000 | 105.000000 | 152.000000 | 216.000000 |
| Day | 109.0 | 1.000000 | 0.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 |
| Возраст | 109.0 | 9.074893 | 5.525062 | 0.250000 | 4.000000 | 8.000000 | 14.000000 | 18.000000 |
| GT | 109.0 | 0.000000 | 0.000000 | 0.000000 | 0.000000 | 0.000000 | 0.000000 | 0.000000 |
| САД | 109.0 | 106.889908 | 17.218820 | 70.000000 | 94.000000 | 110.000000 | 120.000000 | 159.000000 |
| ДАД | 109.0 | 63.981651 | 13.024181 | 30.000000 | 57.000000 | 60.000000 | 70.000000 | 119.000000 |
| СрАД | 109.0 | 78.284404 | 13.481875 | 43.333333 | 70.000000 | 77.333333 | 86.666667 | 117.333333 |
| ЧСС | 109.0 | 109.146789 | 22.503837 | 40.000000 | 92.000000 | 110.000000 | 124.000000 | 165.000000 |
| ИА | 109.0 | 1.056287 | 0.321774 | 0.407692 | 0.807692 | 1.000000 | 1.166667 | 2.133333 |
| SpO2 | 109.0 | 98.477064 | 3.354368 | 70.000000 | 98.000000 | 100.000000 | 100.000000 | 100.000000 |
| Масса тела | 109.0 | 35.683486 | 21.863916 | 6.000000 | 16.000000 | 30.000000 | 50.000000 | 103.000000 |
| Cl- | 109.0 | 109.565381 | 8.939151 | 97.000000 | 104.000000 | 108.744756 | 113.000000 | 148.000000 |
| Лактат | 109.0 | 1.586239 | 2.735279 | 0.000000 | 0.000000 | 1.000000 | 2.500000 | 25.000000 |
| Амилаза | 109.0 | 36.180734 | 62.643695 | 0.000000 | 0.000000 | 15.300000 | 51.000000 | 533.500000 |
| АЛТ | 109.0 | 121.972936 | 242.462407 | 0.000000 | 11.000000 | 32.600000 | 93.600000 | 1260.700000 |
| АСТ | 109.0 | 168.371284 | 362.595774 | 0.000000 | 0.000000 | 53.000000 | 134.000000 | 2242.000000 |
| АЧТВ | 109.0 | 16.946789 | 16.573012 | 0.000000 | 0.000000 | 23.500000 | 31.000000 | 54.100000 |
| Инфузия, % от N | 109.0 | 95.698797 | 63.258685 | 0.000000 | 56.410256 | 79.166667 | 116.761364 | 295.701754 |
| КИ | 109.0 | 3.584862 | 14.213657 | 0.000000 | 0.000000 | 0.000000 | 0.000000 | 130.000000 |
| Площадь тела | 109.0 | 0.894763 | 0.336009 | 0.250000 | 0.610000 | 0.850000 | 1.210000 | 1.390000 |
| Диурез, мл/кг | 109.0 | 38.439326 | 32.946333 | 0.000000 | 15.500000 | 29.777778 | 54.000000 | 205.384615 |
b2 = df[(df['OUTCOME']=='Died')&(df.Day==1)&(df.GT==0)]
b2.describe().T
| count | mean | std | min | 25% | 50% | 75% | max | |
|---|---|---|---|---|---|---|---|---|
| ID | 6.0 | 89.500000 | 22.223861 | 66.000000 | 76.500000 | 85.500000 | 94.500000 | 129.000000 |
| Day | 6.0 | 1.000000 | 0.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 |
| Возраст | 6.0 | 11.333333 | 6.088240 | 1.000000 | 9.000000 | 12.500000 | 16.000000 | 17.000000 |
| GT | 6.0 | 0.000000 | 0.000000 | 0.000000 | 0.000000 | 0.000000 | 0.000000 | 0.000000 |
| САД | 6.0 | 98.666667 | 20.471118 | 70.000000 | 84.750000 | 102.500000 | 110.500000 | 125.000000 |
| ДАД | 6.0 | 58.166667 | 16.869104 | 40.000000 | 43.250000 | 58.000000 | 69.750000 | 81.000000 |
| СрАД | 6.0 | 71.666667 | 17.953025 | 50.000000 | 57.083333 | 72.833333 | 83.333333 | 95.666667 |
| ЧСС | 6.0 | 123.833333 | 21.179392 | 88.000000 | 114.500000 | 130.000000 | 138.750000 | 144.000000 |
| ИА | 6.0 | 1.306877 | 0.380837 | 0.888889 | 1.031304 | 1.212792 | 1.630896 | 1.785714 |
| SpO2 | 6.0 | 94.166667 | 9.495613 | 75.000000 | 96.250000 | 97.500000 | 98.750000 | 100.000000 |
| Масса тела | 6.0 | 39.000000 | 16.911535 | 12.000000 | 29.500000 | 45.000000 | 50.000000 | 56.000000 |
| Cl- | 6.0 | 113.290793 | 12.406448 | 100.000000 | 108.000000 | 108.372378 | 117.186189 | 135.000000 |
| Лактат | 6.0 | 4.083333 | 6.741043 | 0.000000 | 0.000000 | 0.750000 | 4.875000 | 17.000000 |
| Амилаза | 6.0 | 28.516667 | 38.164927 | 0.000000 | 0.000000 | 17.550000 | 38.025000 | 97.000000 |
| АЛТ | 6.0 | 132.033333 | 75.472503 | 22.500000 | 87.000000 | 143.500000 | 172.175000 | 232.800000 |
| АСТ | 6.0 | 256.533333 | 288.563412 | 0.000000 | 69.750000 | 215.000000 | 270.700000 | 798.600000 |
| АЧТВ | 6.0 | 18.500000 | 23.321664 | 0.000000 | 0.000000 | 12.500000 | 27.250000 | 58.000000 |
| Инфузия, % от N | 6.0 | 90.538574 | 75.632715 | 0.000000 | 27.083333 | 115.199055 | 122.859944 | 189.708333 |
| КИ | 6.0 | 61.083333 | 127.271527 | 0.000000 | 1.250000 | 9.500000 | 24.125000 | 320.000000 |
| Площадь тела | 6.0 | 0.676667 | 0.242542 | 0.410000 | 0.475000 | 0.670000 | 0.820000 | 1.030000 |
| Диурез, мл/кг | 6.0 | 49.413156 | 54.571310 | 0.000000 | 8.333333 | 34.970238 | 74.055632 | 140.000000 |
# сравнение средних
gt_1day_users = df.loc[(df.Day==1)&(df.GT==1),'ID'].unique()
a = pd.DataFrame(b2[(b2['OUTCOME']=='Died')&(b2['GT']==0)&(~b2.ID.isin(gt_1day_users))][target_columns[2:-1]].drop('GT',axis=1).mean()).rename(columns = {0:'Группа 1: умерли'})
a_ = []
for i in target_columns[2:-1]:
if i != 'GT':
a_.append(a2[(a2['OUTCOME']=='Survived')&(a2['GT']==0)&(~a2.ID.isin(gt_1day_users))][i].mean())
a['Группа 2: выжили'] = a_
a
| Группа 1: умерли | Группа 2: выжили | |
|---|---|---|
| Возраст | 11.333333 | 9.074893 |
| САД | 98.666667 | 106.889908 |
| ДАД | 58.166667 | 63.981651 |
| СрАД | 71.666667 | 78.284404 |
| ЧСС | 123.833333 | 109.146789 |
| ИА | 1.306877 | 1.056287 |
| SpO2 | 94.166667 | 98.477064 |
| Масса тела | 39.000000 | 35.683486 |
| Cl- | 113.290793 | 109.565381 |
| Лактат | 4.083333 | 1.586239 |
| Амилаза | 28.516667 | 36.180734 |
| АЛТ | 132.033333 | 121.972936 |
| АСТ | 256.533333 | 168.371284 |
| АЧТВ | 18.500000 | 16.946789 |
| Инфузия, % от N | 90.538574 | 95.698797 |
| КИ | 61.083333 | 3.584862 |
| Площадь тела | 0.676667 | 0.894763 |
| Диурез, мл/кг | 49.413156 | 38.439326 |
for i in a2.columns[2:-1]:
if i!='GT':
print(i)
sns.boxplot(data = [b2[i],a2[i]]);
plt.show()
Возраст
САД
ДАД
СрАД
ЧСС
ИА
SpO2
Масса тела
Cl-
Лактат
Амилаза
АЛТ
АСТ
АЧТВ
Инфузия, % от N
КИ
Площадь тела
Диурез, мл/кг
for i in b1.columns[2:-1]:
if i!='GT':
print(i)
sns.boxplot(data = [b1[i],b2[i]]);
plt.show()
Возраст
САД
ДАД
СрАД
ЧСС
ИА
SpO2
Масса тела
Cl-
Лактат
Амилаза
АЛТ
АСТ
АЧТВ
Инфузия, % от N
КИ
Площадь тела
Диурез, мл/кг
Результаты проведенного анализа по исходам заболеваний
def highlight_greaterthan(x):
color = 'lightgreen' if x<0.05 else 'white'
return 'background-color: %s' % color
columns = ['Вариант', 'Показатель', 'Значимость различий', 'p_value', 'alpha','Медиана (1)','25 центиль (1)','75 центиль (1)','Медиана (2)','25 центиль (2)','75 центиль (2)']
df_results = pd.DataFrame(append_list).set_axis(columns,axis=1)
df_results = df_results.pivot(columns = 'Вариант',index = 'Показатель',values = ['p_value','Медиана (1)','25 центиль (1)','75 центиль (1)','Медиана (2)','25 центиль (2)','75 центиль (2)']).drop('GT',axis=0).style.applymap(highlight_greaterthan)
df_results
| p_value | Медиана (1) | 25 центиль (1) | 75 центиль (1) | Медиана (2) | 25 центиль (2) | 75 центиль (2) | ||||||||||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Вариант | Все пациенты | Все пациенты, 1й день | Не получали ГТ | Не получали ГТ, 1й день | Получали ГТ | Получали ГТ, 1й день | Все пациенты | Все пациенты, 1й день | Не получали ГТ | Не получали ГТ, 1й день | Получали ГТ | Получали ГТ, 1й день | Все пациенты | Все пациенты, 1й день | Не получали ГТ | Не получали ГТ, 1й день | Получали ГТ | Получали ГТ, 1й день | Все пациенты | Все пациенты, 1й день | Не получали ГТ | Не получали ГТ, 1й день | Получали ГТ | Получали ГТ, 1й день | Все пациенты | Все пациенты, 1й день | Не получали ГТ | Не получали ГТ, 1й день | Получали ГТ | Получали ГТ, 1й день | Все пациенты | Все пациенты, 1й день | Не получали ГТ | Не получали ГТ, 1й день | Получали ГТ | Получали ГТ, 1й день | Все пациенты | Все пациенты, 1й день | Не получали ГТ | Не получали ГТ, 1й день | Получали ГТ | Получали ГТ, 1й день |
| Показатель | ||||||||||||||||||||||||||||||||||||||||||
| Cl- | 0.000000 | 0.351806 | 0.000050 | 0.588053 | 0.000000 | 0.405534 | 108.744756 | 108.744756 | 108.722378 | 108.744756 | 108.872378 | 108.000000 | 104.000000 | 104.000000 | 104.000000 | 104.000000 | 105.000000 | 105.000000 | 114.000000 | 111.000000 | 114.000000 | 113.000000 | 115.000000 | 109.900000 | 114.500000 | 108.744756 | 111.200000 | 108.372378 | 120.000000 | 108.744756 | 108.744756 | 104.500000 | 108.744756 | 108.000000 | 108.744756 | 104.000000 | 133.250000 | 118.000000 | 124.000000 | 117.186189 | 139.000000 | 116.000000 |
| SpO2 | 0.000000 | 0.000883 | 0.000000 | 0.049058 | 0.000000 | 0.007972 | 99.000000 | 100.000000 | 99.000000 | 100.000000 | 99.000000 | 100.000000 | 98.000000 | 98.000000 | 98.000000 | 98.000000 | 98.000000 | 98.000000 | 100.000000 | 100.000000 | 100.000000 | 100.000000 | 100.000000 | 100.000000 | 98.000000 | 98.000000 | 98.000000 | 97.500000 | 98.000000 | 99.000000 | 98.000000 | 94.500000 | 98.000000 | 96.250000 | 97.500000 | 93.000000 | 99.000000 | 99.000000 | 99.000000 | 98.750000 | 99.000000 | 99.000000 |
| АЛТ | 0.000000 | 0.032205 | 0.010798 | 0.050053 | 0.000000 | 0.173089 | 36.750000 | 30.000000 | 36.000000 | 32.600000 | 39.200000 | 27.400000 | 20.500000 | 13.300000 | 21.125000 | 11.000000 | 20.000000 | 15.150000 | 71.100000 | 95.275000 | 63.825000 | 93.600000 | 85.887500 | 95.450000 | 71.000000 | 62.000000 | 71.000000 | 143.500000 | 71.000000 | 47.000000 | 39.375000 | 39.500000 | 33.000000 | 87.000000 | 45.000000 | 38.000000 | 113.000000 | 156.000000 | 95.000000 | 172.175000 | 113.000000 | 66.000000 |
| АСТ | 0.000000 | 0.121839 | 0.065848 | 0.174516 | 0.000000 | 0.356569 | 48.300000 | 55.400000 | 47.000000 | 53.000000 | 55.000000 | 57.000000 | 30.000000 | 0.352500 | 29.075000 | 0.000000 | 32.487500 | 26.000000 | 83.387500 | 139.450000 | 76.750000 | 134.000000 | 116.000000 | 179.450000 | 111.000000 | 110.000000 | 85.000000 | 215.000000 | 138.500000 | 94.000000 | 42.100000 | 42.000000 | 25.500000 | 69.750000 | 92.400000 | 45.000000 | 183.000000 | 215.000000 | 137.000000 | 270.700000 | 183.000000 | 120.700000 |
| АЧТВ | 0.000103 | 0.930465 | 0.002221 | 0.811024 | 0.120364 | 0.631109 | 30.000000 | 23.000000 | 31.000000 | 23.500000 | 28.000000 | 0.000000 | 24.000000 | 0.000000 | 25.800000 | 0.000000 | 0.000000 | 0.000000 | 35.000000 | 30.500000 | 35.150000 | 31.000000 | 33.000000 | 29.400000 | 24.000000 | 0.000000 | 24.000000 | 12.500000 | 0.000000 | 0.000000 | 0.000000 | 0.000000 | 0.000000 | 0.000000 | 0.000000 | 0.000000 | 38.000000 | 31.500000 | 40.800000 | 27.250000 | 36.500000 | 32.000000 |
| Амилаза | 0.000000 | 0.072585 | 0.000000 | 0.811612 | 0.000000 | 0.054880 | 61.000000 | 13.800000 | 63.100000 | 15.300000 | 55.450000 | 0.000000 | 19.662500 | 0.000000 | 25.050000 | 0.000000 | 0.000000 | 0.000000 | 129.775000 | 49.000000 | 118.725000 | 51.000000 | 156.125000 | 46.500000 | 0.000000 | 0.000000 | 0.000000 | 17.550000 | 0.000000 | 0.000000 | 0.000000 | 0.000000 | 0.000000 | 0.000000 | 0.000000 | 0.000000 | 0.000000 | 17.550000 | 0.000000 | 38.025000 | 0.000000 | 0.000000 |
| Возраст | 0.000040 | 0.757969 | 0.279320 | 0.322632 | 0.000201 | 0.859691 | 12.000000 | 8.500000 | 12.000000 | 8.000000 | 11.000000 | 9.000000 | 4.000000 | 4.000000 | 5.000000 | 4.000000 | 4.000000 | 4.000000 | 15.000000 | 14.000000 | 15.000000 | 14.000000 | 14.000000 | 13.000000 | 9.000000 | 9.000000 | 13.000000 | 12.500000 | 6.666667 | 6.666667 | 5.250000 | 5.125000 | 8.000000 | 9.000000 | 4.833333 | 5.000000 | 13.000000 | 14.000000 | 13.000000 | 16.000000 | 9.000000 | 14.000000 |
| ДАД | 0.000000 | 0.013720 | 0.000510 | 0.488728 | 0.000458 | 0.018939 | 65.000000 | 60.000000 | 65.000000 | 60.000000 | 64.000000 | 62.000000 | 60.000000 | 55.000000 | 60.000000 | 57.000000 | 55.000000 | 51.000000 | 73.000000 | 70.000000 | 73.000000 | 70.000000 | 70.000000 | 70.000000 | 59.500000 | 53.000000 | 60.000000 | 58.000000 | 58.000000 | 52.000000 | 46.750000 | 40.000000 | 48.000000 | 43.250000 | 45.000000 | 30.000000 | 70.000000 | 65.000000 | 74.000000 | 69.750000 | 70.000000 | 65.000000 |
| Диурез, мл/кг | 0.759487 | 0.455305 | 0.088612 | 0.919840 | 0.207432 | 0.476787 | 46.733333 | 30.740260 | 46.900000 | 29.777778 | 46.619048 | 32.916667 | 30.595631 | 14.305556 | 31.711538 | 15.500000 | 29.244505 | 13.039683 | 72.500000 | 56.730769 | 72.727273 | 54.000000 | 70.743590 | 62.019231 | 45.684524 | 36.607143 | 42.500000 | 34.970238 | 50.000000 | 43.000000 | 32.750000 | 19.583333 | 30.769231 | 8.333333 | 35.916667 | 20.000000 | 70.857558 | 70.465116 | 61.750000 | 74.055632 | 77.083333 | 70.000000 |
| ИА | 0.002620 | 0.085650 | 0.091606 | 0.077196 | 0.027207 | 0.498897 | 0.933333 | 1.038462 | 0.930451 | 1.000000 | 0.936364 | 1.076190 | 0.772727 | 0.828591 | 0.772450 | 0.807692 | 0.782143 | 0.854497 | 1.100000 | 1.224465 | 1.090909 | 1.166667 | 1.116447 | 1.267943 | 0.990990 | 1.173333 | 0.970000 | 1.212792 | 1.000000 | 1.173333 | 0.838539 | 0.970702 | 0.812500 | 1.031304 | 0.858396 | 0.950495 | 1.191877 | 1.443137 | 1.190476 | 1.630896 | 1.192099 | 1.333333 |
| Инфузия, % от N | 0.287204 | 0.024974 | 0.091712 | 0.811121 | 0.332342 | 0.010013 | 116.583333 | 79.056962 | 119.450758 | 79.166667 | 108.125000 | 75.583333 | 95.026596 | 54.192073 | 99.593515 | 56.410256 | 81.581605 | 53.624429 | 142.742529 | 113.939951 | 144.647727 | 116.761364 | 139.705882 | 112.952489 | 125.884109 | 112.291667 | 129.166667 | 115.199055 | 109.294118 | 112.291667 | 93.714326 | 76.317203 | 108.359133 | 27.083333 | 88.852877 | 89.164087 | 147.916667 | 177.038684 | 147.500000 | 122.859944 | 157.852930 | 190.833333 |
| КИ | 0.000000 | 0.000076 | 0.000000 | 0.005848 | 0.000000 | 0.007004 | 2.500000 | 0.000000 | 2.500000 | 0.000000 | 2.800000 | 0.000000 | 0.000000 | 0.000000 | 0.000000 | 0.000000 | 0.000000 | 0.000000 | 5.000000 | 2.500000 | 5.000000 | 0.000000 | 5.000000 | 3.850000 | 8.000000 | 5.000000 | 10.000000 | 9.500000 | 7.500000 | 5.000000 | 5.000000 | 0.000000 | 5.000000 | 1.250000 | 5.000000 | 0.000000 | 20.000000 | 21.750000 | 30.000000 | 24.125000 | 18.000000 | 16.000000 |
| Лактат | 0.332688 | 0.878231 | 0.091322 | 0.824679 | 0.830641 | 0.722964 | 1.200000 | 1.100000 | 1.200000 | 1.000000 | 1.400000 | 1.400000 | 0.800000 | 0.000000 | 0.700000 | 0.000000 | 0.900000 | 0.000000 | 1.800000 | 2.600000 | 1.700000 | 2.500000 | 2.337500 | 2.800000 | 1.100000 | 0.000000 | 0.500000 | 0.750000 | 1.200000 | 0.000000 | 0.000000 | 0.000000 | 0.000000 | 0.000000 | 0.000000 | 0.000000 | 2.800000 | 5.050000 | 2.200000 | 4.875000 | 4.100000 | 4.100000 |
| Масса тела | 0.000020 | 0.903589 | 0.146036 | 0.614459 | 0.000384 | 0.823032 | 45.000000 | 30.000000 | 49.000000 | 30.000000 | 35.000000 | 30.000000 | 18.000000 | 16.750000 | 20.000000 | 16.000000 | 17.000000 | 17.500000 | 60.000000 | 51.000000 | 60.000000 | 50.000000 | 60.000000 | 52.500000 | 30.000000 | 30.000000 | 43.000000 | 45.000000 | 25.000000 | 25.000000 | 20.000000 | 20.000000 | 26.000000 | 29.500000 | 20.000000 | 20.000000 | 43.000000 | 50.000000 | 56.000000 | 50.000000 | 30.000000 | 50.000000 |
| Площадь тела | 0.517396 | 0.260281 | 0.121842 | 0.112477 | 0.010713 | 0.011645 | 1.030000 | 0.850000 | 1.030000 | 0.850000 | 1.030000 | 0.970000 | 0.670000 | 0.610000 | 0.670000 | 0.610000 | 0.610000 | 0.610000 | 1.270000 | 1.210000 | 1.270000 | 1.210000 | 1.210000 | 1.150000 | 0.970000 | 1.090000 | 0.850000 | 0.670000 | 1.090000 | 1.210000 | 0.730000 | 0.670000 | 0.430000 | 0.475000 | 0.970000 | 1.090000 | 1.285000 | 1.300000 | 1.210000 | 0.820000 | 1.330000 | 1.330000 |
| САД | 0.000000 | 0.027996 | 0.006317 | 0.334520 | 0.000003 | 0.041469 | 110.000000 | 110.000000 | 113.000000 | 110.000000 | 110.000000 | 108.000000 | 104.000000 | 94.750000 | 105.000000 | 94.000000 | 100.000000 | 95.000000 | 120.000000 | 120.000000 | 120.000000 | 120.000000 | 120.000000 | 119.000000 | 103.000000 | 99.000000 | 105.000000 | 102.500000 | 102.000000 | 90.000000 | 86.500000 | 72.500000 | 90.000000 | 84.750000 | 82.500000 | 70.000000 | 117.000000 | 111.000000 | 123.000000 | 110.500000 | 114.000000 | 110.000000 |
| СрАД | 0.000000 | 0.017992 | 0.001110 | 0.424219 | 0.000060 | 0.023892 | 81.333333 | 78.000000 | 81.833333 | 77.333333 | 79.333333 | 78.000000 | 73.333333 | 69.083333 | 74.416667 | 70.000000 | 71.416667 | 68.000000 | 88.333333 | 86.666667 | 88.666667 | 86.666667 | 87.333333 | 87.500000 | 73.333333 | 68.333333 | 73.333333 | 72.833333 | 71.666667 | 68.333333 | 60.000000 | 49.166667 | 63.000000 | 57.083333 | 59.666667 | 46.666667 | 86.833333 | 80.166667 | 89.666667 | 83.333333 | 84.833333 | 80.000000 |
| ЧСС | 0.914050 | 0.864722 | 0.722759 | 0.103120 | 0.667207 | 0.145632 | 106.000000 | 110.000000 | 106.000000 | 110.000000 | 106.000000 | 115.000000 | 90.000000 | 94.000000 | 90.000000 | 92.000000 | 90.000000 | 98.000000 | 120.000000 | 124.000000 | 120.000000 | 124.000000 | 120.000000 | 122.000000 | 106.000000 | 110.000000 | 102.000000 | 130.000000 | 107.000000 | 100.000000 | 90.000000 | 88.000000 | 96.000000 | 114.500000 | 87.000000 | 80.000000 | 121.250000 | 133.500000 | 119.000000 | 138.750000 | 121.500000 | 120.000000 |